Solana Swaps技能使用说明
2026-04-01
新闻来源:网淘吧
围观:15
电脑广告
手机广告
Solana 代币兑换
管理您的 Solana 钱包:使用 Jupiter 聚合器检查余额并兑换代币。
环境变量
这些环境变量已预先配置,可供使用:

| 变量 | 描述 |
|---|---|
SOLANA_KEYPAIR_PATH | 钱包密钥对 JSON 文件的路径 |
JUPITER_API_KEY | 用于身份验证请求的 Jupiter API 密钥(可避免平台费用,处理 Token2022/pump.fun 代币时需要) |
注意:这些已在技能配置中设置。只需在命令中直接使用$SOLANA_KEYPAIR_PATH和$JUPITER_API_KEY即可。
验证设置
# Check wallet address
solana address --keypair "$SOLANA_KEYPAIR_PATH"
# Check Solana CLI config
solana config get
余额查询
检查 SOL 余额
solana balance --keypair "$SOLANA_KEYPAIR_PATH"
列出所有代币账户
spl-token accounts --owner $(solana address --keypair "$SOLANA_KEYPAIR_PATH")
检查特定代币余额
spl-token balance <TOKEN_MINT_ADDRESS> --owner $(solana address --keypair "$SOLANA_KEYPAIR_PATH")
常见代币铸造地址
| 代币 | 符号 | 铸造地址 | 小数位数 |
|---|---|---|---|
| 封装SOL | SOL | So11111111111111111111111111111111111111112 | 9 |
| USD Coin | USDC | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | 6 |
| Tether | USDT | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB | 6 |
| Bonk | BONK | DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 | 5 |
| Jupiter | JUP | JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN | 6 |
| Raydium | RAY | 4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R | 6 |
通过 Jupiter 进行代币兑换
重要提示:在执行任何兑换前,必须始终显示兑换详情并等待用户明确确认。
步骤 1:获取报价
将人类可读的金额转换为原始单位:
- SOL:乘以 1,000,000,000 (10^9)
- USDC/USDT:乘以 1,000,000 (10^6)
- BONK:乘以 100,000 (10^5)
# Example: Get quote for swapping 1 SOL to USDC
INPUT_MINT="So11111111111111111111111111111111111111112"
OUTPUT_MINT="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
AMOUNT="1000000000" # 1 SOL in lamports
SLIPPAGE_BPS="50" # 0.5% slippage
# Get quote with API key authentication
curl -s -H "x-api-key: $JUPITER_API_KEY" \
"https://api.jup.ag/swap/v1/quote?inputMint=${INPUT_MINT}&outputMint=${OUTPUT_MINT}&amount=${AMOUNT}&slippageBps=${SLIPPAGE_BPS}" | jq .
步骤 2:显示报价并请求确认
解析报价响应并显示给用户:
- 输入:金额和代币名称
- 输出:预期金额和代币名称
- 价格影响百分比
- 滑点容忍度
- 最小接收金额 (otherAmountThreshold)
重要:询问用户"您想继续执行此兑换吗?",并在继续之前等待明确确认("是"、"继续"、"确认")。
步骤3:构建交换交易
用户确认后,请求交换交易:
USER_PUBKEY=$(solana address --keypair "$SOLANA_KEYPAIR_PATH")
# Save quote response to file
QUOTE_FILE="/tmp/jupiter_quote.json"
curl -s -H "x-api-key: $JUPITER_API_KEY" \
"https://api.jup.ag/swap/v1/quote?inputMint=${INPUT_MINT}&outputMint=${OUTPUT_MINT}&amount=${AMOUNT}&slippageBps=${SLIPPAGE_BPS}" > "$QUOTE_FILE"
# Request swap transaction
curl -s -X POST \
-H "x-api-key: $JUPITER_API_KEY" \
-H "Content-Type: application/json" \
"https://api.jup.ag/swap/v1/swap" \
-d "{
\"quoteResponse\": $(cat $QUOTE_FILE),
\"userPublicKey\": \"${USER_PUBKEY}\",
\"dynamicComputeUnitLimit\": true,
\"prioritizationFeeLamports\": {
\"priorityLevelWithMaxLamports\": {
\"maxLamports\": 5000000,
\"priorityLevel\": \"high\"
}
}
}" > /tmp/jupiter_swap.json
# Extract the swap transaction
SWAP_TX=$(cat /tmp/jupiter_swap.json | jq -r '.swapTransaction')
步骤4:签名并提交交易
使用jupiter-swap.mjs脚本进行签名和提交:
node "$(dirname "$0")/scripts/jupiter-swap.mjs" \
--keypair "$SOLANA_KEYPAIR_PATH" \
--transaction "$SWAP_TX"
脚本将输出交易签名和Solscan链接。
安全规则
- 始终在执行前显示交换详情并等待用户确认
- 绝不要未经明确批准自动执行交换
- 始终在尝试交换前检查余额以确保资金充足
- 警告如果价格影响超过1%,则警告用户
- 警告如果滑点设置高于1%(100个基点),则警告用户
- 绝不要记录、显示或传输私钥内容
错误处理
| 错误 | 原因 | 解决方案 |
|---|---|---|
| "余额不足" | 输入代币不足 | 检查余额,减少兑换数量 |
| "滑点容差超出" | 兑换期间价格变动 | 获取新报价,考虑提高滑点容差 |
| "交易已过期" | 区块哈希过旧 | 获取新报价并立即重试 |
| "账户未找到" | 缺少代币账户 | 代币账户将自动创建 |
| "路径未找到" | 交易对流动性不足 | 尝试更小金额或不同代币 |
| "不支持平台费用" | Token2022 代币阻止平台费用 | 使用带有 $JUPITER_API_KEY 请求头的认证 API |
重试逻辑
如果兑换因网络问题失败:
- 等待 2-3 秒
- 获取最新报价(价格可能已变动)
- 向用户展示新报价并再次确认
- 重试交换
示例交互
查询余额
用户:"我的SOL余额是多少?"
- 运行:
solana balance --keypair "$SOLANA_KEYPAIR_PATH" - 报告:"您的钱包中有 X.XXX SOL"
代币交换
用户:"将0.5 SOL兑换成USDC"
- 获取钱包地址
- 获取0.5 SOL(500000000 lamports)兑换USDC的Jupiter报价
- 显示报价详情:
- 从:0.5 SOL
- 至:约XX.XX USDC(预估)
- 价格影响:X.XX%
- 最少收到:XX.XX USDC
- 询问:"您是否要继续进行此次交换?"
- 等待确认
- 当用户回答"是"时:执行交换,报告交易链接
- 关于“否”:确认取消操作
列出所有代币
用户:“显示我所有的代币”
- 运行:
spl-token accounts --owner $(solana address --keypair "$SOLANA_KEYPAIR_PATH") - 格式化并显示代币列表及余额
文章底部电脑广告
手机广告位-内容正文底部


微信扫一扫,打赏作者吧~