名称: trading-solana
描述: “在Solana DEXes上交易代币 - Jupiter, Raydium, Orca, Meteora, Pump.fun”
表情: “☀️”
条件:
环境变量:
- SOLANA_PRIVATE_KEY
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
聊天命令
交换
/swap sol <金额> <从> 到 <到> # 在Solana上交换代币
/swap sol 1 SOL 到 USDC # 交换1 SOL为USDC
/swap sol 100 USDC 到 JUP # 交换100 USDC为JUP
/swap sol 0.5 SOL 到 BONK # 交换0.5 SOL为BONK
报价
/quote sol <金额> <从> 到 <到> # 获取交换报价而不执行
/quote sol 1 SOL 到 USDC # 报价1 SOL → USDC
流动性池发现
/pools sol <代币> # 列出代币的流动性池
/pools sol SOL # 所有SOL池
/pools sol BONK # 所有BONK池
余额
/balance sol # 检查SOL和代币余额
/balance sol <代币> # 检查特定代币余额
支持的DEXes
| DEX |
类型 |
功能 |
| Jupiter |
聚合器 |
跨所有DEX的最佳路径、限价订单、DCA |
| Raydium |
AMM |
集中流动性、高交易量 |
| Orca |
Whirlpool |
集中流动性池、LP管理 |
| Meteora |
DLMM |
动态流动性市场做市商、LP管理 |
| Pump.fun |
Launchpad |
新代币发行 |
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在lamports中
slippageBps: 50, // 0.5%滑点
});
console.log(`交换: ${result.inAmount} → ${result.outAmount}`);
console.log(`交易: ${result.signature}`);
Jupiter限价订单
// 创建限价订单 - 以至少250 USDC卖出1 SOL
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.orderPubKey}`);
// 列出开放订单
const orders = await listJupiterLimitOrders(connection, keypair.publicKey.toBase58());
console.log(`开放订单: ${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创建: ${dca.dcaPubKey}`);
// 列出活跃DCA
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(`预期输出: ${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在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}`);
// 检查代币是否毕业到Raydium
const graduation = await isGraduated(connection, 'token_mint');
if (graduation.graduated) {
console.log(`Raydium池: ${graduation.raydiumPool}`);
}
PumpPortal报价API
// 从PumpPortal获取报价(支持pump和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 Coin |
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
| USDT |
Tether |
Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB |
| JUP |
Jupiter |
JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN |
| BONK |
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('价格变动过大,增加滑点');
}
}