跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →

什么是交易 API?

Raydium 交易 API(Route V2)是一种服务器端服务,可以构建序列化的 Solana 交换交易,而无需客户端维护 RPC 连接或集成整个 Raydium SDK。这大大简化了以下场景的集成:
  • 无法运行本地 RPC 客户端的 Web 前端
  • 资源受限的移动应用
  • 无界面交易机器人
  • 聚合器和钱包提供商
你无需在客户端执行复杂的池路由和交易构造逻辑,而是从我们的 API 请求交换报价和交易构建,然后使用任何 Solana RPC 对结果进行签名和广播。

工作流概览

交易 API 将流程分为两个阶段:

1. 计算阶段:获取报价

调用 /compute/swap-base-in/compute/swap-base-out 根据当前池状态接收预期的交换输出(或所需输入)。此端点是只读的,不需要任何签名:
GET /compute/swap-base-in?inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0
响应包括:
  • 预期输出金额
  • 路由细目(使用了哪些池和流动性来源)
  • 价格影响

2. 交易阶段:构建并签名

获得计算响应后,将其(连同钱包和配置)传递给 /transaction/swap-base-in/transaction/swap-base-out
POST /transaction/swap-base-in
Content-Type: application/json

{
  "wallet": "YourWalletAddress",
  "swapResponse": { ...response from /compute/swap-base-in },
  "txVersion": "V0",
  "computeUnitPriceMicroLamports": "1000",
  "wrapSol": false,
  "unwrapSol": false,
  "inputAccount": "TokenAccount1...",
  "outputAccount": "TokenAccount2..."
}
响应包含:
  • 一个 Base64 编码的版本化交易,已准备好签名
  • 地址查找表地址(仅当 txVersion=V0 时)
你的客户端随后:
  1. 解码交易
  2. 使用用户的密钥对进行签名
  3. 通过任何 Solana RPC 广播
  4. 等待确认

计算端点

GET /compute/swap-base-in

用例:用户指定输入金额,我们计算输出。 必需查询参数
  • inputMint – 你要发送的代币的铸币地址
  • outputMint – 你想要的代币的铸币地址
  • amount – 输入金额(最小单位 lamports)
  • slippageBps – 最大可接受滑点(基点,0–10000)
  • txVersionV0LEGACY
可选
  • referrerBps – 如果你有推荐人权限,收取为推荐人费用的输出基点数

GET /compute/swap-base-out

用例:用户指定所需输出,我们计算所需输入。 必需查询参数
  • inputMintoutputMintamount(所需输出)、slippageBpstxVersion
注意:Base-out 暂不支持推荐人基点(尚未实现)。

交易端点

POST /transaction/swap-base-in

为固定输入金额构建交易。 必需请求体
  • wallet – 你的签名钱包地址
  • swapResponse – 完整的计算响应对象
  • txVersion – 交易版本
  • computeUnitPriceMicroLamports – 优先费(微 lamports)
可选
  • wrapSol – 如果为 true,为输入包装原生 SOL
  • unwrapSol – 如果为 true,在输出中将 WSOL 解包为 SOL
  • inputAccount – 输入的代币账户(如不包装 SOL 则必需)
  • outputAccount – 输出的代币账户
  • nonceInfo – 离线签名用的持久 nonce
  • jitoInfo – Jito MEV 保护捆绑参数
  • referrerWallet – 推荐人钱包用于费用收集

POST /transaction/swap-base-out

为固定输出金额构建交易。 与 base-in 的参数相同,除了:
  • referrerInfo 字段目前已注释(尚未实现)

响应信封

所有端点都返回标准信封:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "success": true,
  "version": "V1",
  "data": { ... }
}
出错时,successfalsemsg 包含错误代码(例如 REQ_WALLET_ERRORREQ_SLIPPAGE_BPS_ERROR)。

交易响应结构

成功的交易响应如下:
{
  "id": "...",
  "success": true,
  "version": "V1",
  "data": {
    "transaction": "AgABB...",  // Base64 编码的交易
    "addressLookupTableAddresses": ["Address1...", "Address2..."]  // 仅 V0
  }
}

集成示例

以下是伪代码中的典型流程:
// 1. 获取报价
const quote = await fetch(
  'https://transaction-v1.raydium.io/compute/swap-base-in?' +
  'inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0'
).then(r => r.json());

// 2. 验证报价
if (!quote.success) {
  throw new Error(quote.msg);
}

// 3. 构建交易
const tx = await fetch(
  'https://transaction-v1.raydium.io/transaction/swap-base-in',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      wallet: userWalletAddress,
      swapResponse: quote,
      txVersion: 'V0',
      computeUnitPriceMicroLamports: '1000',
      inputAccount: userInputTokenAccount,
      outputAccount: userOutputTokenAccount,
    }),
  }
).then(r => r.json());

// 4. 解码并签名
const transaction = VersionedTransaction.deserialize(
  Buffer.from(tx.data.transaction, 'base64')
);
transaction.sign([userKeypair]);

// 5. 通过 RPC 发送
const rpc = new Connection('https://api.mainnet-beta.solana.com');
const sig = await rpc.sendTransaction(transaction);
await rpc.confirmTransaction(sig);

关键参数说明

txVersion

  • V0:现代 Solana 交易,带地址查找表(ALT)。序列化大小更小,费用更低。
  • LEGACY:ALT 前的交易格式。较大,但适用于所有 RPC 端点。
尽可能选择 V0;如果你的 RPC 或钱包不支持 ALT,则回退到 LEGACY

computeUnitPriceMicroLamports

优先费用以加快区块包含。设置为 0 表示无优先费用,或设置为更高的值(例如 1000)以在拥堵的网络中竞争。单位为每计算单位的微 lamports。

slippageBps

最大滑点容限(基点)。100 = 1%,50 = 0.5%。
  • 对于大多数稳定的交换,使用较低值(例如 25–50 bps)
  • 对于波动或低流动性的交易对,增加滑点

wrapSolunwrapSol

  • wrapSol:如果为 true,API 会将你的原生 SOL 包装为 WSOL。不需要 inputAccount
  • unwrapSol:如果为 true,API 会在输出中将 WSOL 解包回原生 SOL。不需要 outputAccount
如果两者都为 false,你必须提供显式的代币账户。

网络端点

网络MainnetDevnet
主机transaction-v1.raydium.iotransaction-v1-devnet.raydium.io
协议HTTPSHTTPS

错误代码

常见错误信息:
代码含义
REQ_SLIPPAGE_BPS_ERROR滑点无效或超出范围
REQ_INPUT_MINT_ERROR输入铸币地址无效
REQ_OUTPUT_MINT_ERROR输出铸币地址无效
REQ_AMOUNT_ERROR金额不是有效数字
REQ_TX_VERSION_ERRORtxVersion 必须是 V0 或 LEGACY
REQ_WALLET_ERROR钱包地址无效
REQ_INPUT_ACCOUT_ERROR输入代币账户缺失或无效
REQ_OUTPUT_ACCOUT_ERROR输出代币账户缺失或无效
UNKNOWN_ERROR服务器端错误;检查你的请求参数

另见