<!-- Source: https://docs.infraio.xyz/vi/concepts/chains -->
<!-- Last updated: 2026-10-04 -->

# Chains & tài sản

InfraIO Pay ưu tiên stablecoin và hỗ trợ đa chain: tám network EVM cùng TRON, Solana và TON. Ma trận bên dưới liệt kê các network InfraIO Pay hỗ trợ. TRON, Solana và TON sắp ra mắt.

## Mainnet

| Chain | Chain ID | Native | USDC | USDT | Confirmations | Min order |
| --- | --- | --- | --- | --- | --- | --- |
| Ethereum | `1` | ETH | ✓ (ERC-20) | ✓ (ERC-20) | **12** | **$5.00** |
| Base | `8453` | ETH | ✓ (ERC-20) | — | **10** | $1.00 |
| Polygon | `137` | POL | ✓ (ERC-20) | ✓ (ERC-20) | **5** | $1.00 |
| BSC | `56` | BNB | ✓ (18-decimal) | ✓ (18-decimal) | **5** | $1.00 |
| Arbitrum | `42161` | ETH | ✓ (ERC-20) | ✓ (ERC-20) | **5** | $1.00 |
| Optimism | `10` | ETH | ✓ (ERC-20) | ✓ (ERC-20) | **5** | $1.00 |
| ZKsync Era | `324` | ETH | — | — | **5** | $1.00 |
| Mantle | `5000` | MNT | — | — | **5** | $1.00 |

> **Warning:**
>
> **USDC + USDT trên BSC dùng 18 decimal**, không phải 6 như mọi nơi
> khác. Nếu bạn tự tính amount token, hãy tính tới điều này. SDK và trang
> checkout do hệ thống host đã xử lý giúp bạn.

> **Note:**
>
> "Min order" là số tiền đơn hàng tối thiểu tính bằng USD. Mặc định là
> **$1.00 trên mainnet và $0.50 trên testnet**, riêng Ethereum là $5 vì
> phí mạng (gas) trên Ethereum sẽ lấn át các order nhỏ. Mức tối thiểu có
> thể khác nhau theo từng network. Order dưới ngưỡng bị reject với
> `AMOUNT_BELOW_MINIMUM` (HTTP 400), và `details.floor_usd` mang mức tối
> thiểu của network đó để bạn hiển thị cho người mua.

### TRON, Solana và TON

> **Note:**
>
> **Sắp ra mắt.** TRON, Solana và TON hiện chưa có trên production.

| Chain | Chain ID | Native | USDC | USDT | Confirmations | Min order |
| --- | --- | --- | --- | --- | --- | --- |
| TRON | `728126428` | TRX | — | ✓ (TRC-20) | **19** | $1.00 |
| Solana | `1151111081099710` | SOL | ✓ (SPL) | ✓ (SPL) | **32** | $1.00 |
| TON | `607000000000000` | TON | — | ✓ (Jetton) | **1** | $1.00 |

> **Note:**
>
> Solana và TON không có chain ID kiểu EVM, nên các ID ở trên là mã định danh nội bộ mà API dùng cho chúng. Mọi stablecoin liệt kê ở đây đều dùng 6 decimal. TON finalize từng block, nên chỉ cần một confirmation là đã final.

## Testnet

| Chain | Chain ID | Native | Confirmations | Min order |
| --- | --- | --- | --- | --- |
| Ethereum Sepolia | `11155111` | ETH | 1 | $0.50 |
| Base Sepolia | `84532` | ETH | 1 | $0.50 |
| Polygon Amoy | `80002` | POL | 1 | $0.50 |
| BNB Smart Chain Testnet | `97` | tBNB | 1 | $0.50 |
| Arbitrum Sepolia | `421614` | ETH | 1 | $0.50 |
| OP Sepolia | `11155420` | ETH | 1 | $0.50 |
| Mantle Sepolia | `5003` | MNT | 1 | $0.50 |
| ZKsync Sepolia | `300` | ETH | 1 | $0.50 |

> **Note:**
>
> **Chế độ thử nghiệm dùng các testnet thật**, không phải chain giả lập. Để
> kích hoạt một giao dịch thử bạn cần token testnet thật — lấy từ
> faucet (ví dụ [sepoliafaucet.com](https://sepoliafaucet.com),
> [coinbase.com/faucets](https://www.coinbase.com/faucets)) rồi gửi
> đến địa chỉ nhận tiền riêng cho từng đơn mà trang thanh toán sinh ra.

### TRON Nile, Solana Devnet, TON Testnet

| Chain | Chain ID | Native | Token thử nghiệm | Confirmations | Min order |
| --- | --- | --- | --- | --- | --- |
| TRON Nile | `3448148188` | TRX | USDT, IUSD | 19 | $0.50 |
| Solana Devnet | `1151111081099711` | SOL | USDC, IUSD | 32 | $0.50 |
| TON Testnet | `607000000000003` | TON | IUSD | 1 | $0.50 |

> **Note:**
>
> Chế độ thử nghiệm trên các network này cũng dùng testnet thật. IUSD là stablecoin thử nghiệm (`IUSD`), chỉ dùng để test.

## Mã currency dùng trong API

`currency` (ở body cấp cao nhất và trong mỗi line item) là **display
currency của order** — số tiền mà người mua nhìn thấy. Hiện tại
platform chấp nhận duy nhất một mã khi tạo:

- `"USD"` — giá trị duy nhất được hỗ trợ. Cả `POST /v1/orders` và
  `POST /b2b/v1/checkout-sessions/quick` đều reject mọi thứ khác với
  `INVALID_INPUT` ("unsupported currency"). `GET /v1/supported/currencies`
  trả về danh sách hiện tại.

**Tài sản on-chain** mà người mua dùng để settle (USDC, USDT, …)
*không* phải là trường `currency`. Nó được người mua chọn trên trang
checkout từ các cặp chain × token mà bạn đã enable trong cấu hình
merchant, và được trả về cho bạn trên PaymentIntent và payload
webhook dưới dạng `settlement_token` (ký hiệu + chain). Đồng native trả
phí mạng (gas) (`ETH`, `BNB`, `POL`, `MNT`, `TRX`, `SOL`, `TON`) chỉ là metadata của chain — không
phải payment currency hợp lệ.

Chain bản thân cũng không được chỉ định tại thời điểm tạo — cùng lý
do: người mua chọn cặp trên trang checkout.

## Confirmations vs finality

Cột "Confirmations" ở trên là số block mà InfraIO Pay chờ trước khi chuyển
một PaymentIntent sang `SETTLED` và gửi `payment.settled`. Số lượng
được chọn theo từng network để khiến reorg khó xảy ra:

- Ethereum mainnet dùng 12 confirmation.
- L2 dùng số lượng thấp hơn, phản ánh rủi ro reorg của từng network.
- Testnet dùng 1 confirmation để việc test nhanh. Đừng coi thanh toán
  test là finality ngang mainnet.

Nếu bạn cần confirmation chặt hơn (hoặc lỏng hơn) cho một chain cụ
thể, số count theo từng chain có thể cấu hình ở tài khoản merchant —
trao đổi với account contact của bạn.

## Bật chain cho merchant của bạn

Một tài khoản mới bắt đầu với một tập testnet rộng. Các network mainnet
khả dụng khi bạn đã hoàn tất xác minh tài khoản và thêm ví Treasury
cho network đó (bạn ký một thông điệp để chứng minh quyền kiểm soát ví).

> Thanh toán đi thẳng vào các ví Treasury của bạn — InfraIO Pay không bao giờ giữ tiền của bạn.

Bật thêm chain tại **Settings → Networks** trong merchant dashboard.

## Địa chỉ nhận tiền riêng cho từng đơn (CREATE2, EVM)

Trên các network EVM, mỗi đơn có một địa chỉ nhận tiền riêng (per-order deposit address, tạo bằng CREATE2) và mỗi địa chỉ là **duy nhất cho một checkout** và được tạo
trước. Bạn không tạo hay fund gì cả: bạn nhận địa chỉ trên
PaymentIntent và hiển thị nó cho người mua.

- Hai intent cho cùng một merchant nhận được địa chỉ **khác nhau** —
  không có collision giữa các người mua.
- Người mua thấy địa chỉ trên trang checkout ngay lập tức.
- Người mua không bao giờ trả phí mạng (gas) cho khâu thiết lập. Tiền được chuyển tự động về ví Treasury của bạn mà không cần bạn theo dõi bước
  chuyển tiền riêng (sweep: bước hệ thống gom tiền từ địa chỉ nhận tiền của đơn về ví Treasury).

Hệ quả thực tế cho integrator:

- `deposit_address` trả về trên một PaymentIntent là một địa chỉ EVM
  thông thường — bạn có thể hiển thị nó dưới dạng QR, quét nó, gửi
  từ ví bất kỳ. Không cần hỗ trợ client đặc biệt.
- Gửi đến địa chỉ **trước** khi intent hết hạn sẽ settle order. Khoản
  nạp muộn (gửi sau khi hết hạn) đôi khi có thể được chuyển về ví Treasury của bạn, nhưng điều này không được đảm bảo, nên đừng dựa vào nó.
- Mỗi địa chỉ là single-use cho mỗi intent. Nếu một người mua cần thử
  lại lần hai, hãy phát hành một checkout session mới — bạn sẽ nhận
  được địa chỉ mới.

## Network thanh toán thẳng vào ví

TRON, Solana và TON hoạt động khác với EVM. **Không có địa chỉ nhận tiền riêng cho từng đơn và không có bước chuyển tiền (sweep)**: ví của người mua trả thẳng vào ví Treasury của bạn (kiểu Thẳng vào ví, Direct to wallet). Khi phí nền tảng được thu on-chain, nó được tách ra ngay trong cùng giao dịch đó (phần của bạn cộng với phí). Nếu không, phí được trừ vào credit trả trước của bạn. Nền tảng quyết định cách nào áp dụng, không phải merchant.

| Network | Cách người mua thanh toán |
| --- | --- |
| TRON | **TronLink.** Checkout mở bên trong TronLink và người mua duyệt giao dịch chuyển. |
| Solana | **Solana Pay.** Người mua quét mã QR bằng Phantom, Solflare hoặc bất kỳ ví Solana Pay nào; ví sẽ lấy giao dịch từ trang checkout. |
| TON | **TON Connect** (Tonkeeper, Telegram Wallet, MyTonWallet). Người mua duyệt một yêu cầu duy nhất; các giao dịch chuyển mang một comment tham chiếu order để xác định khoản thanh toán. |

Trước khi người mua có thể chọn một trong các network này, hãy thêm **ví Treasury cho họ network đó** (EVM, TRON, Solana hoặc TON) trong merchant dashboard. Định dạng địa chỉ được chấp nhận:

- **TRON** — địa chỉ base58 bắt đầu bằng `T…`
- **Solana** — public key base58
- **TON** — dạng thân thiện `UQ…` / `EQ…` (hoặc dạng raw `0:…`), chỉ basechain

Trên các network này không có địa chỉ nhận tiền riêng cho từng đơn để hiển thị, vì vậy hãy để trang thanh toán dựng sẵn điều khiển việc thanh toán.

## Những thứ HIỆN CHƯA hỗ trợ

- **Bitcoin / Lightning.** Không được hỗ trợ.
- **Thanh toán bằng đồng native.** Người mua chỉ trả bằng stablecoin. Các đồng native (ETH, BNB, POL, MNT, TRX, SOL, TON) không được chấp nhận làm phương tiện thanh toán trên bất kỳ network nào.
- **Stablecoin khác** (USDe, FDUSD, …). Liên hệ support để yêu cầu
  thêm một token trên network đã được enable.

## Tiếp theo

- [Khái niệm → Sessions](https://docs.infraio.xyz/vi/concepts/sessions) — việc chọn chain/asset
  diễn ra như thế nào tại thời điểm checkout.
- [Bắt đầu → Giới thiệu](https://docs.infraio.xyz/vi/get-started/introduction) — mô hình tổng thể.
