Token programs and extensions
Compatibility is a policy for both mints, not a consequence of being an SPL token.
Design. Validate both mint accounts and their owning token programs. A token launched by the same platform is not automatically compatible or liquid. Check the current implementation before enabling Token-2022 extensions.
SOL is represented by a token account
The architecture uses WSOL in the core. Wrapping and unwrapping native SOL belong to a client or router flow. No native-lamport swap entry point is implied. See Solana's Sync Native guide.
Separate reward tokens from pool assets
Pool settlement currently accepts classic SPL Token accounts. An external hook may separately declare Token-2022 state and program access for a reward mint it controls. The RewardCredits example uses that distinct CPI boundary; its mint is not an additional AMM reserve or evidence that Token-2022 swaps, LP deposits, or fee claims are supported. The core's protected settlement accounts cannot be supplied as reward extras.
Issuer freeze authority
Classic SPL mints may retain an issuer freeze authority. Pool creation does not require the issuer to revoke it and does not alter the mint. The SDK and Metis adapter use the same eligibility policy. A freeze authority on the mint is separate from a frozen token account: SPL Token still rejects transfers involving frozen source or destination accounts. A failed instruction rolls back the transaction's token movements and grapl accounting; network fees remain payable.
An issuer can freeze a pool vault as well as a user's token account. grapl cannot bypass that decision. Metis rejects a refreshed snapshot containing a frozen vault; a freeze after quotation can still cause execution to fail.
USDC, USDG and WSOL
A read-only mainnet snapshot at slot 456394876 recorded these profiles:
| Asset | Mint program | Current core status |
|---|---|---|
| USDC | Classic SPL Token, six decimals, issuer freeze authority | Unchanged official mint profile tested locally through pool creation, liquidity, swap and fees with WSOL |
| WSOL | Classic SPL native mint, nine decimals | Real local wrapping, backing lamports and token conservation verified; wrapping remains explicit |
| USDG | Token-2022, six decimals, issuer-controlled extensions | Unsupported by the classic CLMM/SDK; the separate experimental settlement passed local replay with its observed extension profile |
USDG's observed mint includes a permanent delegate, mint close authority, zero transfer fees, a disabled transfer hook, confidential transfer configuration and metadata. Removing the freeze-authority check alone does not support this profile. Extensions must be validated at execution, since their authorities may change them. This does not enable confidential settlement or modify the original tokens.
Sources: Circle USDC, Paxos USDG, and Solana payment mint addresses.
Extension checklist
| Capability | Required integration work |
|---|---|
| Transfer fees | Distinguish gross debit, received input, net output, and withheld balances |
| Transfer hooks | Resolve extra accounts for both directions and evaluate CPI composition |
| Frozen or default-frozen accounts | Define operational eligibility and explicit failure behavior |
| Confidential balances | Define a supported accounting path before acceptance |
| Other or unknown extensions | Reject unless a validated policy allows them |
This is a requirements table, not a supported-extension list. Extension support must be tested for swaps, liquidity, fee collection, claims, and graduation, not only pool creation.
Transfer hooks are mint policy
Token-2022 calls the mint's hook through its transfer interface. That callback observes a transfer context, not a grapl swap lifecycle context. The token program restricts the privileges of transfer accounts passed into the hook; do not expect the user's signer to propagate unchanged. Transfer Hook guide.
Pool and token hooks may coexist only when their required accounts, invocation graph, and budgets are supported. Neither hook may silently bypass the other's policy.
Balances must be spendable
Do not count withheld transfer fees as usable reserves. A quote must account for supported transfer costs at both ends. The amount credited to a beneficiary and the amount arriving in their wallet can differ when a mint charges transfer fees; document that distinction explicitly.