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('价格变动过大,增加滑点');
}
}