trading-solana trading-solana

Solana DEX 交易技能,支持在 Solana 链上通过多个去中心化交易所(DEX)进行代币交易,包括聚合器、AMM、DLMM 等多种类型的交易平台。关键词:Solana, DEX, 去中心化交易所,代币交易。

DeFi 0 次安装 0 次浏览 更新于 3/5/2026

Solana DEX 交易 - 完整 API 参考

使用 Jupiter 聚合器、Raydium、Orca Whirlpools、Meteora DLMM 和 Pump.fun 在 Solana 上交易任何代币。

必需的环境变量

SOLANA_PRIVATE_KEY=base58_or_json_array    # 您的 Solana 钱包私钥
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com  # 可选:自定义 RPC

聊天命令

兑换

/sol swap <amount> <from> to <to>           # 在 Solana 上兑换代币
/sol swap 1 SOL to USDC                     # 将 1 SOL 兑换为 USDC
/sol swap 100 USDC to JUP                   # 将 100 USDC 兑换为 JUP
/sol swap 0.5 SOL to BONK                   # 将 0.5 SOL 兑换为 BONK

报价

/sol quote <amount> <from> to <to>          # 获取兑换报价而不执行
/sol quote 1 SOL to USDC                    # 报价 1 SOL → USDC

池发现

/sol pools <token>                          # 列出代币的流动性池
/sol pools SOL                              # 所有 SOL 池
/sol pools BONK                             # 所有 BONK 池

余额 & 钱包

/sol balance                                # 检查 SOL 和代币余额
/sol address                                # 显示钱包地址

支持的 DEXes

DEX 类型 特性
Jupiter 聚合器 最佳路线跨所有 DEXes,限价单,DCA
Raydium AMM 集中流动性,高交易量
Orca Whirlpool 集中流动性池,LP 管理
Meteora DLMM 动态流动性市场制造商,LP 管理
Pump.fun 发起平台 新代币发行

TypeScript API 参考

Jupiter (聚合器 - 推荐)

import {
  executeJupiterSwap,
  getJupiterQuote,
  createJupiterLimitOrder,
  cancelJupiterLimitOrder,
  listJupiterLimitOrders,
  createJupiterDCA,
  closeJupiterDCA,
  listJupiterDCAs,
} from 'clodds/solana/jupiter';

// 通过 Jupiter 执行兑换(最佳路线)
const result = await executeJupiterSwap(connection, keypair, {
  inputMint: 'So11111111111111111111111111111111111111112',  // SOL
  outputMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
  amount: '1000000000',  // 1 SOL in lamports
  slippageBps: 50,       // 0.5% 滑点
});

console.log(`Swapped: ${result.inAmount} → ${result.outAmount}`);
console.log(`TX: ${result.signature}`);

Jupiter 限价单

// 创建限价单 - 出售 1 SOL 至少获得 250 USDC
const order = await createJupiterLimitOrder(connection, keypair, {
  inputMint: 'So11111111111111111111111111111111111111112',
  outputMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
  inAmount: '1000000000',  // 1 SOL
  outAmount: '250000000',  // 250 USDC
  expiredAtMs: Date.now() + 7 * 24 * 60 * 60 * 1000, // 1 周到期
});
console.log(`Order created: ${order.orderPubKey}`);

// 列出开放订单
const orders = await listJupiterLimitOrders(connection, keypair.publicKey.toBase58());
console.log(`Open orders: ${orders.length}`);

// 取消订单
await cancelJupiterLimitOrder(connection, keypair, order.orderPubKey);

Jupiter DCA (平均成本投资)

// 创建 DCA - 将 100 USDC 兑换为 JUP,每小时 10 USDC
const dca = await createJupiterDCA(connection, keypair, {
  inputMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
  outputMint: 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN', // JUP
  inAmount: '100000000',        // 总共 100 USDC
  inAmountPerCycle: '10000000', // 每次兑换 10 USDC
  cycleSecondsApart: 3600,      // 每小时(最少 30 秒)
});
console.log(`DCA created: ${dca.dcaPubKey}`);

// 列出活跃 DCAs
const dcas = await listJupiterDCAs(connection, keypair.publicKey.toBase58());

// 关闭 DCA 并提取剩余资金
await closeJupiterDCA(connection, keypair, dca.dcaPubKey);

Raydium

import {
  executeRaydiumSwap,
  getRaydiumQuote,
  listRaydiumPools,
  getClmmPositions,
  createClmmPosition,
  increaseClmmLiquidity,
  decreaseClmmLiquidity,
  closeClmmPosition,
  harvestClmmRewards,
  addAmmLiquidity,
  removeAmmLiquidity,
} from 'clodds/solana/raydium';

// 获取报价
const quote = await getRaydiumQuote({
  inputMint: 'SOL',
  outputMint: 'USDC',
  amount: 1_000_000_000,
});
console.log(`Expected output: ${quote.outAmount}`);

// 执行兑换
const result = await executeRaydiumSwap(connection, keypair, {
  inputMint: 'So11111111111111111111111111111111111111112',
  outputMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
  amount: '1000000000',
  slippageBps: 50,
});

// 列出池子
const pools = await listRaydiumPools({ tokenMints: ['So11111111111111111111111111111111111111112'] });

// CLMM: 开放集中流动性位置
const position = await createClmmPosition(connection, keypair, {
  poolId: 'POOL_ID_HERE',
  priceLower: 100,
  priceUpper: 200,
  baseAmount: '1000000000',
});

// CLMM: 列出位置
const positions = await getClmmPositions(connection, keypair);

// CLMM: 收获奖励
const rewards = await harvestClmmRewards(connection, keypair);

// AMM: 添加流动性
await addAmmLiquidity(connection, keypair, {
  poolId: 'AMM_POOL_ID',
  amountA: '1000000000',
  fixedSide: 'a',
});

Orca Whirlpools

import { executeOrcaWhirlpoolSwap, getOrcaWhirlpoolQuote, listOrcaWhirlpoolPools } from 'clodds/solana/orca';

// 获取报价
const quote = await getOrcaWhirlpoolQuote({
  inputMint: 'SOL',
  outputMint: 'USDC',
  amount: 1_000_000_000,
});

// 执行兑换
const result = await executeOrcaWhirlpoolSwap({
  inputMint: 'SOL',
  outputMint: 'USDC',
  amount: 1_000_000_000,
  slippage: 0.5,
});

// 列出池子
const pools = await listOrcaWhirlpoolPools({ token: 'SOL' });

Meteora DLMM

import { executeMeteoraDlmmSwap, getMeteoraDlmmQuote, listMeteoraDlmmPools } from 'clodds/solana/meteora';

// 获取报价
const quote = await getMeteoraDlmmQuote({
  inputMint: 'SOL',
  outputMint: 'USDC',
  amount: 1_000_000_000,
});

// 执行兑换
const result = await executeMeteoraDlmmSwap({
  inputMint: 'SOL',
  outputMint: 'USDC',
  amount: 1_000_000_000,
  slippage: 0.5,
});

// 列出池子
const pools = await listMeteoraDlmmPools({ token: 'SOL' });

Pump.fun

import {
  executePumpFunTrade,
  getBondingCurveState,
  getTokenPriceInfo,
  calculateBuyQuote,
  calculateSellQuote,
  isGraduated,
  getTokenInfo,
  getPumpPortalQuote,
} from 'clodds/solana/pumpapi';

// 在 Pump.fun 上购买代币
const result = await executePumpFunTrade(connection, keypair, {
  mint: 'token_mint_address',
  action: 'buy',
  amount: 0.1,           // SOL 数量
  denominatedInSol: true,
  slippageBps: 500,      // 5% 滑点用于波动性大的代币
});

// 出售代币
const result = await executePumpFunTrade(connection, keypair, {
  mint: 'token_mint_address',
  action: 'sell',
  amount: 1000000,       // 代币数量
  denominatedInSol: false,
  slippageBps: 500,
});

链上绑定曲线

import BN from 'bn.js';

// 直接从链上获取绑定曲线状态
const state = await getBondingCurveState(connection, 'token_mint');
if (state) {
  console.log(`虚拟 SOL: ${state.virtualSolReserves.toString()}`);
  console.log(`虚拟代币: ${state.virtualTokenReserves.toString()}`);
  console.log(`毕业: ${state.complete}`);
}

// 获取全面的定价信息
const priceInfo = await getTokenPriceInfo(connection, 'token_mint', 200); // 200 = SOL 价格 USD
console.log(`价格: ${priceInfo.priceInSol} SOL ($${priceInfo.priceInUsd})`);
console.log(`市值: $${priceInfo.marketCapUsd}`);
console.log(`绑定进度: ${(priceInfo.bondingProgress * 100).toFixed(1)}%`);

// 计算购买报价及价格影响
const solAmount = new BN(0.5 * 1e9); // 0.5 SOL in lamports
const buyQuote = calculateBuyQuote(state, solAmount, 100); // 1% 费用
console.log(`代币出: ${buyQuote.tokensOut.toNumber() / 1e6}`);
console.log(`价格影响: ${buyQuote.priceImpact.toFixed(2)}%`);

// 计算出售报价
const tokenAmount = new BN(1000000 * 1e6); // 1M 代币
const sellQuote = calculateSellQuote(state, tokenAmount, 100);
console.log(`SOL 出: ${sellQuote.solOut.toNumber() / 1e9}`);

// 检查代币是否毕业到 PumpSwap
const graduation = await isGraduated(connection, 'token_mint');
if (graduation.graduated) {
  console.log(`PumpSwap 池: ${graduation.pumpswapPool}`);
}

PumpPortal 报价 API

// 从 PumpPortal 获取报价(支持泵和 Raydium 池)
const quote = await getPumpPortalQuote({
  mint: 'token_mint',
  action: 'buy',
  amount: '0.5',  // 0.5 SOL
  pool: 'auto',   // pump, raydium, 或 auto
});
console.log(`输入: ${quote.inputAmount}, 输出: ${quote.outputAmount}`);

代币解析

import { resolveTokenMints, getTokenList } from 'clodds/solana/tokenlist';

// 将代币符号解析为铸造地址
const mints = await resolveTokenMints(['SOL', 'USDC', 'JUP', 'BONK']);
// ['So111...', 'EPjF...', '...', '...']

// 获取完整的代币列表
const tokens = await getTokenList();

池发现

import { listAllPools, selectBestPool } from 'clodds/solana/pools';

// 列出代币对的所有池子
const pools = await listAllPools({
  inputMint: 'SOL',
  outputMint: 'USDC',
});

// 基于流动性选择最佳池子
const best = await selectBestPool({
  inputMint: 'SOL',
  outputMint: 'USDC',
  amount: 1_000_000_000,
});

钱包工具

import { loadSolanaKeypair, getSolanaConnection, signAndSendTransaction } from 'clodds/solana/wallet';

// 从环境变量加载密钥对
const keypair = loadSolanaKeypair();

// 获取连接
const connection = getSolanaConnection();

// 签名并发送交易
const signature = await signAndSendTransaction(connection, transaction, keypair);

代币符号

可以使用的常见代币符号:

符号 名称 铸造地址
SOL Solana So11111111111111111111111111111111111111112
USDC USD 币 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
USDT 泰达币 Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
JUP 木星 JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN
BONK 邦克 DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263
WIF dogwifhat EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm
PYTH Pyth HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3

滑点设置

代币类型 推荐滑点
主要(SOL, USDC) 0.5%
中型 1-2%
小型/梗币 3-5%
新发行 5-10%

错误处理

import { SolanaSwapError, InsufficientBalanceError, SlippageExceededError } from 'clodds/solana';

try {
  await executeJupiterSwap({ ... });
} catch (error) {
  if (error instanceof InsufficientBalanceError) {
    console.log('余额不足');
  } else if (error instanceof SlippageExceededError) {
    console.log('价格变动过大,增加滑点');
  }
}