Jupiter 是 Solana 上的 DEX 聚合器,会在所有 Solana DEX(Raydium、Orca、Phoenix 等)之间路由兑换以获取最优价格。本技能提供代币价格查询、兑换、限价单创建、订单查询与取消等能力。
用途:当用户提及 Jupiter、Solana 兑换、SOL/USDC 兑换或 Solana DEX 聚合器时使用。
主要能力(来自 exports.py 的工具): jupiter_price(token):查询任意代币的美元价格。 jupiter_swap(in, out, amount, wallet?):仅报价(不传钱包)或报价加交易(传入钱包)。 jupiter_execute_swap(signed_tx, request_id, in_mint?, out_mint?):通过 /ultra/v1/execute 广播兑换,仅用于兑换。 jupiter_broadcast_tx(signed_tx):通过 Solana RPC 广播,用于限价单和取消操作。 jupiter_limit_create(in, out, making, taking, maker):创建限价单。 jupiter_limit_orders(wallet, history=False):列出未成交或历史订单。 jupiter_limit_cancel(order_pubkey, maker):取消未成交订单。
费用与前提:Gas 始终由钱包 SOL 余额支付,Solana 没有 Gas 赞助。wallet_sol_transfer 不适用于 Jupiter,它仅用于发送 SOL。兑换费用约为 0.0002–0.001 SOL(优先费加新代币账户租金押金)。创建限价单约需 0.002 SOL(链上账户租金)。操作前应调用 wallet_sol_balance() 确认 SOL 大于 0.01。任何链上操作前需先加载钱包技能,并提议标准的通配 Solana 策略(拒绝导出密钥加允许 *)。
硬性规则:始终使用 ultra/v1/order,而非已弃用的 swap/v1/quote 加 swap/v1/swap。仅在意图执行时才向 jupiter_swap 传入钱包公钥;省略它返回仅报价结果(无交易),适合价格查询。绝不能传入数字型的 makingAmount/takingAmount,必须是字符串,否则 API 返回 ZodError 400。限价单绝不能使用 /ultra/v1/execute,必须通过 jupiter_broadcast_tx()(Solana RPC)。执行兑换或限价单前绝不能省略用户确认。兑换后应调用 wallet_sol_balance() 验证余额变化。绝不能提及 DCA,lite-api 不支持。
已知代币地址(Solana):SOL(So1111…1112,9 位小数)、USDC(EPjF…Dt1v,6 位)、USDT(Es9v…nwNYB,6 位)、JUP(JUPy…NsDvCN,6 位)、BONK(DezX…B263,5 位)、WIF(EKpQ…zcjm,6 位)、JTO(jtoj…9mCL,6 位而非 9 位)。未列出的代币需直接向用户询问 mint 地址,代币搜索 API 已弃用。
兑换流程:调用 jupiter_swap 获取报价(含 in_amount、out_amount、in_usd、out_usd、transaction、request_id);向用户展示金额、美元价值和 price_impact_pct 并等待确认;用 wallet_sol_sign_transaction 签名;用 jupiter_execute_swap 广播并返回状态、签名和金额;最后调用 wallet_sol_balance() 验证。若缺少或无效钱包公钥,transaction 为 null,需用有效钱包重试。兑换是原子的,失败则不扣款(Gas 费除外)。
限价单流程:调用 jupiter_limit_create(传入 input_token、output_token、making_amount、taking_amount 和 maker)返回 order_pubkey、transaction、implied_price;向用户展示隐含价格与金额并等待确认;约 90 秒内完成签名与广播,否则 blockhash 过期;用 jupiter_broadcast_tx 广播(不要用 jupiter_execute_swap);再用 jupiter_limit_orders 确认订单出现,若立即成交则查 orderHistory。最小订单约 5 美元,低于则返回错误。若隐含价格优于或等于市场价,keeper 可能立即成交。API 响应中的 orderKey 字段即订单公钥,makingAmount/takingAmount 已是人类可读值而非 lamports,未使用的 expiredAt 和 feeBps 应完全省略。
取消流程:列出订单,选择 order_pubkey,调用 jupiter_limit_cancel,签名后用 jupiter_broadcast_tx 广播。
工具路由:询问价格用 jupiter_price;询问报价用不带钱包的 jupiter_swap;兑换用带钱包的 jupiter_swap 并确认、签名、jupiter_execute_swap;限价单用 jupiter_limit_create 后签名、jupiter_broadcast_tx;查询订单用 jupiter_limit_orders;取消订单用 jupiter_limit_orders 后 jupiter_limit_cancel、签名、jupiter_broadcast_tx;代币不在已知列表则询问 mint 地址。
限制:不支持 DCA;代币搜索 API 已弃用;未提供的收费、价格或平台细节暂未提供。