> ## 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.

# 交易 API 概覽

> Solana 伺服器端交換交易建構工具。

<Info>
  **本頁內容由 AI 自動翻譯，所有內容以英文版本為準。**

  [查看英文版 →](/api-reference/route-api-v2/overview)
</Info>

## 什麼是交易 API？

Raydium 交易 API（Route V2）是一項伺服器端服務，可建構序列化的 Solana 交換交易，無需用戶端維護 RPC 連線或整合完整的 Raydium SDK。這大幅簡化了以下情境的整合：

* 無法執行本地 RPC 用戶端的網頁前端
* 資源受限的行動應用程式
* 無介面交易機器人
* 聚合器與錢包提供商

無須在用戶端執行複雜的池路由與交易建構，你可以向我們的 API 請求交換報價與交易建構，然後使用任何 Solana RPC 簽署並廣播結果。

## 工作流程概覽

交易 API 將工作分為兩個階段：

### 1. 計算階段：取得報價

呼叫 `/compute/swap-base-in` 或 `/compute/swap-base-out` 以根據當前池狀態接收預期交換輸出（或所需輸入）。此端點為**唯讀**，不需要任何簽署：

```bash theme={null}
GET /compute/swap-base-in?inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0
```

回應包含：

* 預期輸出金額
* 路由明細（使用了哪些池與流動性來源）
* 價格滑點

### 2. 交易階段：建構與簽署

取得計算回應後，將其（連同錢包和配置）傳遞至 `/transaction/swap-base-in` 或 `/transaction/swap-base-out`：

```bash theme={null}
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）
* `txVersion` – `V0` 或 `LEGACY`

**選用**：

* `referrerBps` – 如果你有推薦人授權，作為推薦人費用收取的輸出基點數

### `GET /compute/swap-base-out`

**使用情景**：使用者指定所需輸出，我們計算所需輸入。

**必要的查詢參數**：

* `inputMint`、`outputMint`、`amount`（所需輸出）、`slippageBps`、`txVersion`

**注意**：base-out 不支援推薦人基點（尚未實現）。

## 交易端點

### `POST /transaction/swap-base-in`

為固定輸入金額建構交易。

**必要的請求體**：

* `wallet` – 你的簽署錢包地址
* `swapResponse` – 完整計算回應物件
* `txVersion` – 交易版本
* `computeUnitPriceMicroLamports` – 優先費用（微 lamports）

**選用**：

* `wrapSol` – 如為真，為輸入包裝原生 SOL
* `unwrapSol` – 如為真，在輸出中解包 WSOL 為 SOL
* `inputAccount` – 輸入代幣帳戶（若不包裝 SOL 則必需）
* `outputAccount` – 輸出代幣帳戶
* `nonceInfo` – 離線簽署用的持久 nonce
* `jitoInfo` – Jito MEV 保護捆綁參數
* `referrerWallet` – 推薦人錢包以收取費用

### `POST /transaction/swap-base-out`

為固定輸出金額建構交易。

**參數與 base-in 相同**，除了：

* `referrerInfo` 欄位目前已註解（尚未實現）

## 回應信封

所有端點都會傳回標準信封：

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "success": true,
  "version": "V1",
  "data": { ... }
}
```

發生錯誤時，`success` 為 `false`，`msg` 包含錯誤代碼（例如 `REQ_WALLET_ERROR`、`REQ_SLIPPAGE_BPS_ERROR`）。

## 交易回應結構

成功的交易回應看起來像這樣：

```json theme={null}
{
  "id": "...",
  "success": true,
  "version": "V1",
  "data": {
    "transaction": "AgABB...",  // Base64 編碼的交易
    "addressLookupTableAddresses": ["Address1...", "Address2..."]  // 僅用於 V0
  }
}
```

## 整合範例

以下是虛擬代碼中的典型流程：

```typescript theme={null}
// 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）
* 對波動或低流動性代幣對增加

### `wrapSol` 和 `unwrapSol`

* **wrapSol**：如為真，API 將你的原生 SOL 包裝為 WSOL。不需要 `inputAccount`。
* **unwrapSol**：如為真，API 在輸出中將 WSOL 解包為原生 SOL。不需要 `outputAccount`。

如果兩者都為假，你必須提供明確的代幣帳戶。

## 網路端點

| 網路 | 主網                          | 開發網                                |
| -- | --------------------------- | ---------------------------------- |
| 主機 | `transaction-v1.raydium.io` | `transaction-v1-devnet.raydium.io` |
| 協定 | HTTPS                       | HTTPS                              |

## 錯誤代碼

常見的錯誤訊息：

| 代碼                        | 含義                        |
| ------------------------- | ------------------------- |
| `REQ_SLIPPAGE_BPS_ERROR`  | 滑點無效或超出範圍                 |
| `REQ_INPUT_MINT_ERROR`    | 輸入鑄造地址無效                  |
| `REQ_OUTPUT_MINT_ERROR`   | 輸出鑄造地址無效                  |
| `REQ_AMOUNT_ERROR`        | 金額不是有效數字                  |
| `REQ_TX_VERSION_ERROR`    | txVersion 必須為 V0 或 LEGACY |
| `REQ_WALLET_ERROR`        | 錢包地址無效                    |
| `REQ_INPUT_ACCOUT_ERROR`  | 輸入代幣帳戶遺失或無效               |
| `REQ_OUTPUT_ACCOUT_ERROR` | 輸出代幣帳戶遺失或無效               |
| `UNKNOWN_ERROR`           | 伺服器端錯誤；檢查你的請求參數           |

## 另見

* [OpenAPI 規範](/zh-Hant/api-reference/openapi/route-api-v2.yaml)
* [聚合器整合指南](/zh-Hant/integration-guides/aggregator)
