Skip to content

docs(payments): sync token and chain coverage with the pay-core catalog - #99

Open
chris13524 wants to merge 2 commits into
mainfrom
sync-token-chain-coverage-with-pay-core
Open

docs(payments): sync token and chain coverage with the pay-core catalog#99
chris13524 wants to merge 2 commits into
mainfrom
sync-token-chain-coverage-with-pay-core

Conversation

@chris13524

@chris13524 chris13524 commented Aug 26, 2026

Copy link
Copy Markdown
Member

Nothing syncs this table with pay-core's SUPPORTED_TOKENS — no CI check, no codegen, no test — so it had drifted: six offered tokens were missing entirely.

Companion PR adding a step to pay-core's add-token skill so this stops happening: WalletConnect/pay-core#1546.

How this was verified

Dumped every registered token from src/tokens.rs with its rendered CAIP-19 and offered/disabled state, then diffed that against this file. All 43 GA rows now match the catalog exactly, and no disabled or test-only token is listed.

Added to GA

Registered and offered today, but absent from the page:

Token Chains
CHFAU Ethereum, Polygon, Base
SoFiUSD Ethereum
USAT Ethereum
USDG Robinhood Chain (Ethereum was already listed)
WBNB BSC (WETH ×4 and WPOL were already listed)

Added to Coming soon

Registered but gated off by a rollout flag: ETH on Robinhood Chain (alongside the other native-ETH rows) and USDC on Stellar.

Also

Normalized the two PYUSD addresses to their EIP-55 checksummed form, so every identifier on the page is byte-identical to what the API returns. Both spellings parse, so this is cosmetic.

The Settlement column — left alone, but it needs a product decision

An earlier revision of this PR "corrected" five rows in the Settlement column. That was wrong and has been reverted (9d72d7a). Recording why, because the same mistake is easy to repeat:

The offramp allowlists (SUPPORTED_IRON_TOKENS, SUPPORTED_EZEEBIT_TOKENS) gate the settlement destination — the asset the offramp receives as a deposit — not the token the buyer pays. expand_candidates pairs swap sources with every settlement candidate, offramp routes included, so a token in no allowlist still reaches fiat by swapping into one first. USDT/Polygon → USDC → Iron → EUR is a real path.

Which raises the actual question for this page: now that swaps are live, does the per-row Settlement distinction still mean anything? Any offered token with swap liquidity can reach fiat for a merchant who has opted in via token_allowlist. The page's own footnote anticipated exactly this — "fiat coverage will expand as WalletConnect Pay introduces internal swaps, allowing a broader set of tokens to be converted into supported offramp assets before payout" — and that has now shipped, which arguably makes both the column and the footnote stale in the opposite direction from what I first assumed.

Since fiat reachability now depends on per-merchant configuration rather than on the token, this is a product/marketing call, not something to derive from the code. Flagging rather than guessing.

Other open questions

  1. ~35 volatile tokens (WBTC, LINK, UNI, AAVE, LDO, wstETH, ARB, OP, MORPHO, PENDLE, CRV, MKR, COMP, SNX, 1INCH, PEPE) are registered but reach buyers only as swap sources gated per merchant. Do they belong on a General Availability page?
  2. Fiat Coverage lists GBP as generally available, but no offramp provider and no Currency enum variant supports it. Separate fix, flagging it here.

🤖 Generated with Claude Code

Nothing syncs this table with pay-core's `SUPPORTED_TOKENS`, so it had drifted:
six offered tokens were missing and five rows misstated fiat settlement.

Verified against the catalog by dumping every registered token with its
rendered CAIP-19, offered/disabled state, and offramp-allowlist membership,
then diffing that against this file. All 43 GA rows now match.

Added to GA (registered and offered today):

- CHFAU on Ethereum, Polygon, Base
- SoFiUSD and USAT on Ethereum
- USDG on Robinhood Chain (Ethereum was already listed)
- WBNB on BSC (WETH and WPOL were already listed)

Settlement corrections. Fiat settlement comes from two offramp allowlists with
different corridors — Iron covers USD/EUR, Ezeebit covers USD only among the
currencies this page documents:

- USDT/Polygon claimed Fiat (USD, EUR) but is in neither allowlist, so it has
  no direct offramp path at all — now Direct Crypto
- USDC/Solana, USDT/Ethereum and USDT/Solana claimed EUR but are Ezeebit-only,
  which has no EUR corridor — now Fiat (USD)
- USDT/BSC claimed Direct Crypto only, understating its Ezeebit support — now
  Fiat (USD), consistent with the other Ezeebit rows

Added to Coming soon (registered but gated off by a rollout flag):

- ETH on Robinhood Chain, alongside the other native-ETH rows
- USDC on Stellar

Also normalized the two PYUSD addresses to their EIP-55 checksummed form, so
every identifier on the page is byte-identical to what the API returns.

Deliberately not changed, pending a product decision:

- Ezeebit also settles to KES and ZAR. Those corridors appear nowhere on this
  page or on Fiat Coverage, so listing them here would contradict that page.
- ~35 volatile tokens (WBTC, LINK, UNI, AAVE, LDO, wstETH, ARB, OP, MORPHO,
  PENDLE, CRV, MKR, COMP, SNX, 1INCH, PEPE) are registered but reach buyers
  only as swap sources gated per merchant, so they are arguably not GA.
- Fiat Coverage lists GBP as generally available, but no offramp provider and
  no currency enum variant supports it.

Co-Authored-By: Claude <noreply@anthropic.com>
@mintlify

mintlify Bot commented Aug 26, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
wc-pay-docs 🟢 Ready View Preview Aug 26, 2026, 6:42 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

The premise was wrong. The offramp allowlists gate the settlement destination —
the asset the offramp receives — not the token the buyer pays. Swap sources are
expanded against every settlement candidate, offramp routes included, so a token
in no allowlist still reaches fiat by swapping into one first. USDT/Polygon ->
USDC -> Iron -> EUR is a real path, so marking that row Direct Crypto was a
regression, not a fix.

Keeps the missing-token additions and the address normalization, which stand on
their own.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant