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

# Tổng quan về Transaction API

> Công cụ xây dựng giao dịch swap trên máy chủ cho Solana.

<Info>
  **Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.**

  [Xem bản tiếng Anh →](/api-reference/route-api-v2/overview)
</Info>

## Transaction API là gì?

Raydium Transaction API (Route V2) là một dịch vụ trên máy chủ giúp xây dựng các giao dịch swap Solana đã được tuần tự hóa mà không cần các ứng dụng khách phải duy trì kết nối RPC hoặc tích hợp toàn bộ SDK Raydium. Điều này giúp đơn giản hóa đáng kể quá trình tích hợp cho:

* Các giao diện web không thể chạy một RPC client cục bộ
* Ứng dụng di động có tài nguyên hạn chế
* Các bot giao dịch không có giao diện
* Các aggregator và nhà cung cấp ví

Thay vì thực hiện định tuyến pool và xây dựng giao dịch phức tạp trên client, bạn yêu cầu báo giá swap và xây dựng giao dịch từ API của chúng tôi, sau đó ký và phát sóng kết quả bằng bất kỳ RPC Solana nào.

## Tổng quan quy trình làm việc

Transaction API chia công việc thành hai giai đoạn:

### 1. Giai đoạn tính toán: Lấy báo giá

Gọi `/compute/swap-base-in` hoặc `/compute/swap-base-out` để nhận kết quả swap dự kiến (hoặc input yêu cầu) dựa trên trạng thái pool hiện tại. Endpoint này **chỉ đọc** và không yêu cầu bất kỳ ký kết nào:

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

Phản hồi bao gồm:

* Số lượng output dự kiến
* Chi tiết tuyến đường (những pool và nguồn thanh khoản nào được sử dụng)
* Tác động giá

### 2. Giai đoạn giao dịch: Xây dựng và ký

Sau khi có phản hồi từ compute, chuyển nó (cùng với ví và cấu hình) đến `/transaction/swap-base-in` hoặc `/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..."
}
```

Phản hồi chứa:

* Một giao dịch được mã hóa base64 sẵn sàng ký
* Địa chỉ bảng tra cứu địa chỉ (nếu txVersion=V0)

Ứng dụng khách của bạn sau đó:

1. Giải mã giao dịch
2. Ký nó bằng keypair của người dùng
3. Phát sóng nó qua bất kỳ RPC Solana nào
4. Chờ xác nhận

## Các endpoint tính toán

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

**Trường hợp sử dụng**: Người dùng chỉ định số lượng input, chúng tôi tính toán output.

**Tham số truy vấn bắt buộc**:

* `inputMint` – Địa chỉ mint của token bạn gửi
* `outputMint` – Địa chỉ mint của token bạn muốn
* `amount` – Số lượng input tính bằng lamports (đơn vị nhỏ nhất)
* `slippageBps` – Slippage tối đa chấp nhận tính bằng basis points (0–10000)
* `txVersion` – `V0` hoặc `LEGACY`

**Tùy chọn**:

* `referrerBps` – Nếu bạn có quyền referrer, basis points của output để thu phí referrer

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

**Trường hợp sử dụng**: Người dùng chỉ định output mong muốn, chúng tôi tính toán input yêu cầu.

**Tham số truy vấn bắt buộc**:

* `inputMint`, `outputMint`, `amount` (output mong muốn), `slippageBps`, `txVersion`

**Lưu ý**: Không có basis points referrer cho base-out (chưa được triển khai).

## Các endpoint giao dịch

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

Xây dựng một giao dịch cho một số lượng input cố định.

**Body bắt buộc**:

* `wallet` – Địa chỉ ví ký của bạn
* `swapResponse` – Toàn bộ đối tượng phản hồi compute
* `txVersion` – Phiên bản giao dịch
* `computeUnitPriceMicroLamports` – Phí ưu tiên tính bằng micro-lamports

**Tùy chọn**:

* `wrapSol` – Nếu true, gói SOL native cho input
* `unwrapSol` – Nếu true, mở gói WSOL thành SOL trong output
* `inputAccount` – Token account cho input (bắt buộc nếu không gói SOL)
* `outputAccount` – Token account cho output
* `nonceInfo` – Nonce bền vững cho ký ngoại tuyến
* `jitoInfo` – Tham số gói bảo vệ MEV Jito
* `referrerWallet` – Ví referrer để thu phí

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

Xây dựng một giao dịch cho một số lượng output cố định.

**Các tham số giống như base-in**, ngoại trừ:

* Trường `referrerInfo` hiện đang được ghi chú (chưa được triển khai)

## Phần đóng gói phản hồi

Tất cả các endpoint trả về một phần đóng gói chuẩn:

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

Khi lỗi xảy ra, `success` là `false` và `msg` chứa mã lỗi (ví dụ: `REQ_WALLET_ERROR`, `REQ_SLIPPAGE_BPS_ERROR`).

## Hình dạng phản hồi giao dịch

Một phản hồi giao dịch thành công trông như sau:

```json theme={null}
{
  "id": "...",
  "success": true,
  "version": "V1",
  "data": {
    "transaction": "AgABB...",
    "addressLookupTableAddresses": ["Address1...", "Address2..."]
  }
}
```

## Ví dụ tích hợp

Đây là một luồng điển hình dưới dạng pseudocode:

```typescript theme={null}
// 1. Lấy báo giá
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. Xác thực báo giá
if (!quote.success) {
  throw new Error(quote.msg);
}

// 3. Xây dựng giao dịch
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. Giải mã và ký
const transaction = VersionedTransaction.deserialize(
  Buffer.from(tx.data.transaction, 'base64')
);
transaction.sign([userKeypair]);

// 5. Gửi qua RPC
const rpc = new Connection('https://api.mainnet-beta.solana.com');
const sig = await rpc.sendTransaction(transaction);
await rpc.confirmTransaction(sig);
```

## Các tham số chính được giải thích

### `txVersion`

* **V0**: Giao dịch Solana hiện đại với Address Lookup Tables (ALTs). Kích thước tuần tự hóa nhỏ hơn, phí thấp hơn.
* **LEGACY**: Định dạng giao dịch trước ALT. Lớn hơn, nhưng hoạt động với tất cả các endpoint RPC.

Chọn **V0** khi có thể; quay lại **LEGACY** nếu RPC hoặc ví của bạn không hỗ trợ ALTs.

### `computeUnitPriceMicroLamports`

Phí ưu tiên để đưa vào block nhanh hơn. Đặt thành `0` để không có phí ưu tiên, hoặc các giá trị cao hơn (ví dụ: `1000`) để cạnh tranh trong các mạng lưới bị tắc nghẽn. Đơn vị là micro-lamports cho mỗi compute unit.

### `slippageBps`

Dung sai slippage tối đa tính bằng basis points. `100` = 1%, `50` = 0,5%.

* Sử dụng giá trị thấp hơn (ví dụ: 25–50 bps) cho hầu hết các swap ổn định
* Tăng lên cho các cặp biến động hoặc thanh khoản thấp

### `wrapSol` và `unwrapSol`

* **wrapSol**: Nếu `true`, API gói SOL native của bạn thành WSOL. Không cần `inputAccount`.
* **unwrapSol**: Nếu `true`, API mở gói WSOL output trở lại SOL native. Không cần `outputAccount`.

Nếu cả hai đều là `false`, bạn phải cung cấp các token account rõ ràng.

## Các endpoint mạng

| Mạng      | Mainnet                     | Devnet                             |
| --------- | --------------------------- | ---------------------------------- |
| Host      | `transaction-v1.raydium.io` | `transaction-v1-devnet.raydium.io` |
| Giao thức | HTTPS                       | HTTPS                              |

## Mã lỗi

Các thông báo lỗi phổ biến:

| Mã                        | Ý nghĩa                                            |
| ------------------------- | -------------------------------------------------- |
| `REQ_SLIPPAGE_BPS_ERROR`  | Slippage không hợp lệ hoặc ngoài phạm vi           |
| `REQ_INPUT_MINT_ERROR`    | Địa chỉ input mint không hợp lệ                    |
| `REQ_OUTPUT_MINT_ERROR`   | Địa chỉ output mint không hợp lệ                   |
| `REQ_AMOUNT_ERROR`        | Số lượng không phải là một số hợp lệ               |
| `REQ_TX_VERSION_ERROR`    | txVersion phải là V0 hoặc LEGACY                   |
| `REQ_WALLET_ERROR`        | Địa chỉ ví không hợp lệ                            |
| `REQ_INPUT_ACCOUT_ERROR`  | Input token account bị thiếu hoặc không hợp lệ     |
| `REQ_OUTPUT_ACCOUT_ERROR` | Output token account bị thiếu hoặc không hợp lệ    |
| `UNKNOWN_ERROR`           | Lỗi phía máy chủ; kiểm tra tham số yêu cầu của bạn |

## Xem thêm

* [Thông số OpenAPI](/vi/api-reference/openapi/route-api-v2.yaml)
* [Hướng dẫn tích hợp Aggregator](/vi/integration-guides/aggregator)
