# Availability Matrix

What works **today**, per flow × chain × mode. The chain roster itself is in [Supported Chains](/docs/supported-chains.md); this page consolidates the caveats — deposit-side vs settlement-side chain support, the testnet venue gaps, the Flow C swap-leg gate, and stealth mainnet-gating.

## Flow × mode

| Flow | Live (`pk_live_` / mainnet) | Test (`pk_test_` / testnet) |
| --- | --- | --- |
| **A — Checkout** | ✓ any token, any supported source chain → USDC on any destination | ✓ same-chain testnet USDC; cross-token / cross-chain needs venue wiring (below) |
| **B — Request** | ✓ same engine as A | same testnet limits as A |
| **C — Send (connected wallet)** | ⚠ **cross-chain USDC → USDC only** — every path with a swap leg fails closed pre-mainnet (below) | same gate, plus the testnet venue gaps |
| **D — Stealth Checkout** `experimental` | ⚠ payments settle, but stealth **withdrawal is mainnet-gated** (below) | ✓ for end-to-end trial (same-chain testnet USDC) |
| **E — Stealth Request** `experimental` | same withdrawal gate; widget is **React Native only** (headless on web) | same |

Mode is picked by key prefix alone — `pk_test_` offers testnet chains, `pk_live_` mainnet ([Test mode](/docs/test-mode.md)).

## Chain caveats

- **HyperEVM (`999`, testnet `998`) is destination-only.** The chain rejects EIP-7702 deposit burners, so it can receive settled USDC but never host a deposit.
- **Solana (`7565164`) is source + destination** — but only for the deposit-engine flows (A, B, D, E). Flow C is driven by an EIP-1193 (EVM) wallet and has no Solana leg. Details in [Solana Payments](/docs/solana-adapter.md).
- **Every other EVM chain in the table** (Ethereum, Arbitrum, Base, Optimism, Polygon, Monad) is source + destination.

## Flow C: the swap-leg gate (pre-mainnet)

The per-chain **Universal Router** address is still a zero placeholder in the backend's `chains.rs`. Client and server both *fail closed* rather than sign against an unpinnable `tx.to`, so **any Flow C path with a swap leg returns an error** — every same-chain quote, and every cross-chain quote from a non-USDC source. The one path that works end-to-end today is **cross-chain USDC → USDC**. Wiring the real router addresses is a documented pre-mainnet item. See [Flow C](/docs/flow-c-send.md).

## Testnet: cross-token / cross-chain gaps

Same-chain testnet USDC-in settlement (the [quickstart](/docs/merchant-quickstart.md) path) needs no external venue and works out of the box. Cross-token and cross-chain testnet paths additionally need per-chain wiring that ships empty for testnets: swap-router + Across venue addresses in `chains.rs`, and an `RPC_URL_<testnetId>` per testnet. Solana test settlement runs on **devnet**. See [Test mode](/docs/test-mode.md).

## Stealth (Lunar): mainnet-gating

Flows D and E are **experimental, native USDC only**. Payments settle to the derived one-time address on the normal enforced-Intent machinery, but **stealth withdrawal is mainnet-gated**: the EVM gasless relay requires the `StealthForwarder` deployment (unconfigured → the withdraw endpoint errors), and the ed25519 (Solana) flavor additionally awaits an external cryptography review before mainnet. Experimental-tier surfaces may change or be removed — see [Versioning](/docs/versioning.md).
