Solana Swaps
v1通过Jupiter聚合器在Solana上交换代币,并检查钱包余额。当用户想要交换代币、检查SOL/代币余额或获取交换报价时使用。
运行时依赖
安装命令
点击复制技能文档
Solana Swaps 管理您的Solana钱包:检查余额并使用Jupiter聚合器交换代币。 环境变量 这些环境变量已经预先配置并可供使用: 变量 描述 SOLANA_KEYPAIR_PATH 钱包密钥对JSON文件的路径 JUPITER_API_KEY 用于认证请求的Jupiter API密钥(避免平台费用,Token2022/pump.fun代币所需) 注意:这些已经在技能配置中设置。直接在命令中使用$SOLANA_KEYPAIR_PATH和$JUPITER_API_KEY。 验证设置 # 检查钱包地址 solana address --keypair "$SOLANA_KEYPAIR_PATH" # 检查Solana CLI配置 solana config get 余额检查 检查SOL余额 solana balance --keypair "$SOLANA_KEYPAIR_PATH" 列出所有代币账户 spl-token accounts --owner $(solana address --keypair "$SOLANA_KEYPAIR_PATH") 检查特定代币余额 spl-token balance --owner $(solana address --keypair "$SOLANA_KEYPAIR_PATH") 常见代币mint地址 代币符号 mint地址 小数位 Wrapped 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交换代币 CRITICAL:始终显示交换详情并等待用户明确确认后再执行任何交换。 步骤1:获取报价 将人类可读的金额转换为原始单位: SOL:乘以1,000,000,000(10^9) USDC/USDT:乘以1,000,000(10^6) BONK:乘以100,000(10^5) # 示例:获取1 SOL交换到USDC的报价 INPUT_MINT="So11111111111111111111111111111111111111112" OUTPUT_MINT="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" AMOUNT="1000000000" # 1 SOL in lamports SLIPPAGE_BPS="50" # 0.5%滑点 # 获取带有API密钥认证的报价 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) 重要:询问用户“您是否要继续此次交换?”并等待明确确认(“yes”,“proceed”,“confirm”)后再继续。 步骤3:构建交换事务 在用户确认后,请求交换事务: USER_PUBKEY=$(solana address --keypair "$SOLANA_KEYPAIR_PATH") # 保存报价响应到文件 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" # 请求交换事务 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 # 提取交换事务 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 bps),请警告用户 永远不要记录、显示或传输私钥内容 错误处理 错误原因 解决方案 “余额不足” 没有足够的输入代币 检查余额,减少交换金额 “滑点容忍度超过” 价格在交换期间移动 获取新的报价,考虑更高的滑点 “事务过期” 区块哈希太旧 获取新的报价并立即重试 “账户未找到” 缺少代币账户 代币账户将自动创建 “路线未找到” 对没有流动性 尝试更小的金额或不同的代币 “平台费用不支持” Token2022代币阻止平台费用 使用带有$JUPITER_API_KEY头的认证API 重试逻辑 如果交换由于网络问题失败: 等待2-3秒 获取新的报价(价格可能已经改变) 重新确认用户显示新的报价 重试交换 示例交互 检查余额 用户:“我的SOL余额是多少?” 运行:solana balance --keypair "$SOLANA_KEYPAIR_PATH"