체인 및 자산
InfraIO Pay는 EVM 우선이며 스테이블코인 우선입니다. 지원되는 모든 체인은
payment-service의 networks.json 레지스트리에 구성되어 있으며, 아래 매트릭스는
테스트 및 메인넷에서 현재 라이브 상태와 일치합니다.
메인넷
| 체인 | 체인 ID | 네이티브 | USDC | USDT | 확인 수 | 최소 주문 |
|---|---|---|---|---|---|---|
| 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 |
BSC의 USDC + USDT는 다른 체인의 6 decimals와 달리 18 decimals를 사용합니다. 특정 이유로 클라이언트 측에서 금액을 계산하는 경우 이를 고려하세요 — 그렇지 않으면 SDK의 amount 필드가 처리합니다.
“최소 주문”은 payment-intent 생성 시 강제되는 USD 하한선입니다. 현재
배포된 기본값은 메인넷 $1.00 / 테스트넷 $0.50이며, L1 가스가 작은
주문을 압도하기 때문에 Ethereum은 $5로 상향 조정되었습니다. 관리자 운영팀은
네트워크별로 오버라이드할 수 있습니다 — 하한선 미만 주문은
AMOUNT_BELOW_MINIMUM(HTTP 400)으로 거부되며, details.floor_usd가 실제
구성된 값을 전달하므로 프론트엔드에서 표시할 수 있습니다.
테스트넷
| 체인 | 체인 ID | 네이티브 | 확인 수 | 최소 주문 |
|---|---|---|---|---|
| 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 |
테스트 모드는 실제 테스트넷을 사용하며, 목 체인이 아닙니다. 테스트 결제를 트리거하려면 실제 테스트넷 자금이 필요합니다 — 포셋(예: sepoliafaucet.com , coinbase.com/faucets )에서 받아 체크아웃 페이지가 생성하는 입금 주소로 전송하세요.
API에서 사용되는 통화 코드
currency(최상위 본문 및 각 라인 아이템에서)는 주문의 표시 통화입니다 —
구매자가 보는 금액입니다. 현재 플랫폼은 생성 시 단일 코드만 허용합니다.
"USD"— payment-service의IsSupportedCurrency가 true를 반환하는 유일한 값입니다.POST /v1/orders와POST /b2b/v1/checkout-sessions/quick모두 다른 값은INVALID_INPUT(“지원되지 않는 통화”)으로 거부합니다. 공식 목록은GET /v1/supported/currencies에 있으므로 서버의 enum과 클라이언트가 드리프트하지 않습니다.
구매자가 정산하는 온체인 자산(USDC, USDT 등)은 currency 필드가 아닙니다.
이는 가맹점 구성에서 활성화한 체인 × 토큰 조합 중 구매자가 체크아웃 페이지에서
선택한 것이며, PaymentIntent + 웹훅 페이로드에서 settlement_token(심볼 +
체인)으로 다시 노출됩니다. 네이티브 가스 토큰(ETH, BNB, POL, MNT)은
체인 메타데이터일 뿐이며 유효한 결제 통화가 아닙니다.
체인 자체도 생성 시 지정되지 않습니다 — 동일한 이유로, 구매자가 체크아웃 페이지에서 조합을 선택합니다.
확인 수 vs 파이널리티
위의 “확인 수” 열은 체인 워처가 PaymentIntent를 SETTLED로 전환하고
payment.settled를 발생시키기 전에 대기하는 블록 수입니다. 기본값은 각
체인에서 일반적인 reorg 깊이에서 확률적 파이널리티를 제공하도록 조정되어
있습니다.
- 메인넷 Ethereum의 12는 머지 이후 대부분의 거래소가 사용하는 값입니다.
- L2는 더 빨리 정산되지만 결국 Ethereum의 파이널리티를 상속받습니다 — 체인별 확인 수는 L1이 아닌 L2 자체의 reorg 위험을 반영합니다.
- 테스트넷은 개발 루프를 빠르게 유지하기 위해 1 confirmation에 위치합니다. 개발 환경에서 메인넷급 안전성으로 추정하지 마세요.
특정 체인에 대해 더 엄격한(또는 더 느슨한) 확인이 필요한 경우 체인별 확인 수는 가맹점 계정에서 구성 가능합니다 — 계정 담당자에게 문의하세요.
가맹점에 대한 체인 활성화
기본적으로 새 가맹점은 테스트넷에서는 허용적인 체인 세트를, 메인넷에서는 더 좁은 세트를 가집니다. 메인넷 세트는 다음 조건을 충족해야 활성화됩니다.
- KYB 완료
- 체인별 트레저리 지갑 어트테이션(수탁 권한을 증명하는 메시지에 서명)
가맹점 대시보드의 Settings → Networks에서 추가 체인을 활성화하세요.
결정론적 입금 주소
EVM 입금 주소는 체크아웃별로 결정론적입니다. 플랫폼이 가맹점, 주문, 인텐트에 바인딩된 내부 매개변수에서 미리 도출합니다. 사전 생성하거나 자금을 조달할 필요가 없습니다 — PaymentIntent에서 주소를 받아 구매자에게 전달하기만 하면 됩니다.
- 동일 가맹점의 두 인텐트는 다른 주소를 받습니다 — 구매자 간 충돌이 없습니다.
- 주소는 온체인 설정 이전에 체크아웃 페이지에 나타나므로 구매자는 목적지를 즉시 볼 수 있습니다.
- 구매자는 설정 가스를 부담하지 않습니다. 자금은 가맹점이 추적해야 하는 별도의 스윕 단계 없이 가맹점 트레저리로 바로 정산됩니다.
연동자를 위한 실용적인 시사점:
- PaymentIntent에서 반환된
deposit_address는 일반 EVM 주소입니다 — QR 코드로 표시하거나, 스캔하거나, 모든 지갑에서 송금할 수 있습니다. 특별한 클라이언트 지원이 필요하지 않습니다. - 인텐트 만료 전에 주소로 전송하면 주문이 정산됩니다. 만료 후 전송은 최선의 노력 기반으로 복구됩니다 — 플랫폼이 일부 경우 늦은 입금을 다시 스윕할 수 있지만, 늦은 자금이 안전하다고 가정하지 마세요.
- 각 주소는 인텐트별로 일회용입니다. 구매자가 두 번째 시도를 해야 하는 경우 새 체크아웃 세션을 발급하세요 — 새 주소를 받게 됩니다.
현재 지원되지 않는 항목
- Tron / TRC-20. USDT-TRC20용으로 자주 요청됩니다 — 로드맵에 있지만 아직 라이브되지 않았습니다.
- Solana / SPL. 로드맵에 있습니다.
- Bitcoin / Lightning. 로드맵에 없습니다.
- 레이어 1 네이티브 스테이블코인(USDe, FDUSD 등). 대시보드 요청을 통해 추가하세요. 기반 체인이 활성화되어 있어야 합니다.