Skip to Content
Khái niệmChains & tài sản

Chains & tài sản

InfraIO Pay ưu tiên EVM và ưu tiên stablecoin. Mọi chain được hỗ trợ đều được cấu hình trong registry networks.json của payment-service; ma trận bên dưới mirror những gì đang chạy live trên test và mainnet.

Mainnet

ChainChain IDNativeUSDCUSDTConfirmationsMin order
Ethereum1ETH✓ (ERC-20)✓ (ERC-20)12$5.00
Base8453ETH✓ (ERC-20)10$1.00
Polygon137POL✓ (ERC-20)✓ (ERC-20)5$1.00
BSC56BNB✓ (18-decimal)✓ (18-decimal)5$1.00
Arbitrum42161ETH✓ (ERC-20)✓ (ERC-20)5$1.00
Optimism10ETH✓ (ERC-20)✓ (ERC-20)5$1.00
ZKsync Era324ETH5$1.00
Mantle5000MNT5$1.00

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 vì lý do nào đó tính amount ở client, hãy tính tới điều này — nếu không thì các trường amount của SDK đã xử lý cho bạn.

“Min order” là sàn USD được enforce tại thời điểm tạo payment-intent. Mặc định hiện tại là $1.00 mainnet / $0.50 testnet, riêng Ethereum được nâng lên $5 vì gas L1 lấn át các order nhỏ. Admin ops có thể override theo từng network — order dưới ngưỡng bị reject với AMOUNT_BELOW_MINIMUM (HTTP 400), và details.floor_usd mang giá trị cấu hình thực tế để FE của bạn hiển thị.

Testnet

ChainChain IDNativeConfirmationsMin order
Ethereum Sepolia11155111ETH1$0.50
Base Sepolia84532ETH1$0.50
Polygon Amoy80002POL1$0.50
BNB Smart Chain Testnet97tBNB1$0.50
Arbitrum Sepolia421614ETH1$0.50
OP Sepolia11155420ETH1$0.50
Mantle Sepolia5003MNT1$0.50
ZKsync Sepolia300ETH1$0.50

Test mode 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 , coinbase.com/faucets ) rồi gửi đến địa chỉ deposit mà trang checkout sinh ra.

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 khiến IsSupportedCurrency trả về true trong payment-service. Cả POST /v1/ordersPOST /b2b/v1/checkout-sessions/quick đều reject mọi thứ khác với INVALID_INPUT (“unsupported currency”). Danh sách được công bố nằm tại GET /v1/supported/currencies để enum của server và client của bạn không bao giờ lệch nhau.

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à surface ngược lại cho bạn trên PaymentIntent + payload webhook dưới dạng settlement_token (ký hiệu + chain). Native gas token (ETH, BNB, POL, MNT) 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à chain watcher chờ trước khi chuyển một PaymentIntent sang SETTLED và phát payment.settled. Mặc định được tinh chỉnh để đạt finality xác suất trên mỗi chain ở độ sâu reorg điển hình:

  • 12 trên Ethereum mainnet là giá trị mà hầu hết exchange dùng sau Merge.
  • L2 settle nhanh hơn nhưng cuối cùng vẫn kế thừa finality của Ethereum — số count theo từng chain phản ánh rủi ro reorg của bản thân L2, không phải L1.
  • Testnet được giữ ở 1 conf để giữ vòng dev nhanh; đừng ngoại suy ra mức an toàn ngang mainnet trong môi trường dev của bạn.

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ặc định một merchant mới có một tập chain rộng trên testnet và một tập hẹp hơn trên mainnet. Tập mainnet bị gate bởi:

  1. Hoàn thành KYB
  2. Chứng thực ví treasury theo từng chain (bạn ký một thông điệp chứng minh custody)

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

Địa chỉ deposit xác định

Địa chỉ deposit EVM là xác định theo từng checkout: platform dẫn xuất chúng trước thời gian từ các tham số nội bộ gắn với merchant, order, và intent. Bạn không pre-create hay fund gì cả — bạn chỉ nhận địa chỉ trên PaymentIntent và đưa 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.
  • Địa chỉ hiển thị trên trang checkout trước bất kỳ setup on-chain nào, để người mua thấy đích đến ngay lập tức.
  • Người mua không bao giờ trả gas setup. Vốn settle thẳng vào treasury của merchant mà không cần bước sweep riêng mà merchant phải theo dõi.

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. Gửi sau hết hạn được recover trên cơ sở best-effort — platform có thể re-sweep deposit muộn trong một số trường hợp, nhưng đừng bao giờ giả định vốn muộn là an toà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.

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

  • Tron / TRC-20. Thường được yêu cầu cho USDT-TRC20; nằm trong roadmap, chưa live.
  • Solana / SPL. Nằm trong roadmap.
  • Bitcoin / Lightning. Không nằm trong roadmap.
  • Stablecoin native Layer-1 (USDe, FDUSD, …). Thêm qua yêu cầu dashboard; chỉ cần chain bên dưới được enable.

Tiếp theo