This guide applies whether you integrate with the Wallet Pay SDK or directly with the Gateway API (API-first). The signing requirements are identical — Solana actions arrive as
Everything else in this guide — advertising Solana accounts, routing by namespace, the
walletRpc actions, and the signed transaction is returned in the results array. The code samples below use SDK method names; if you are integrating API-first, the equivalents are:| SDK | Gateway API |
|---|---|
getPaymentOptions({ accounts }) | POST /v1/gateway/payment/{id}/options with accounts[] |
option.actions / getRequiredPaymentActions | the option’s actions[], resolved via POST /v1/gateway/payment/{id}/fetch when an action is type build |
confirmPayment(signatures) | POST /v1/gateway/payment/{id}/confirm with results[] |
solana_signTransaction payload, and returning the signed transaction blob — is the same in both integrations.Solana payment flow
A Solana payment follows the same three-call flow as any other WalletConnect Pay payment. The only Solana-specific parts are the signing method (solana_signTransaction) and that your wallet signs but never broadcasts — the WalletConnect Pay backend submits the signed transaction to the network.
Key capabilities
Implementing Solana support enables three primary features:- Native SOL transactions — Users can initiate Solana payments through Pay links when merchants support the network
- Mixed-chain options — Single payment links can present both EVM and Solana choices simultaneously
- Namespace-based routing — Individual actions route to appropriate signers based on CAIP-2 namespace identifiers
Implementation requirements
Follow these requirements to correctly implement Solana payment support in your wallet.Advertise Solana accounts
Include Solana accounts when callinggetPaymentOptions using the CAIP-10 format:
- TypeScript
- Kotlin
- Swift
Only advertise Solana accounts if your wallet has Solana keys available. Wallets without Solana support should not include Solana accounts in the request.
Route actions by namespace
Determine the signing wallet for each action using the namespace from the chain ID. Extract the namespace fromactions[i].walletRpc.chainId rather than assuming a single wallet type for all actions.
- TypeScript
- Kotlin
- Swift
Implement Solana signing
For Solana actions, implement thesolana_signTransaction method. Sign the transaction and append the signed transaction blob, base64-encoded to the signatures array.
- TypeScript
- Kotlin
- Swift
Do not send transactions
Do not implementsolana_signAndSendTransaction for Pay flows. The WalletConnect Pay backend handles broadcasting the signed transaction. Your wallet should only sign and return the signed transaction blob.
Handle array-wrapped params
The Pay backend provides params in an array-wrapped structure:[{ transaction }]. Make sure to unwrap this structure when parsing the transaction data.
Validate signers at runtime
Guard action handlers against missing signers at execution time. If your wallet doesn’t have a Solana signer available when a Solana action is encountered, raise an error rather than silently skipping the action.Reject unknown methods
Reject unknown wallet-RPC methods instead of silently omitting them from result arrays. The signatures array must match the actions array in order and length.Complete action handler
Here’s a complete example showing how to handle both EVM and Solana actions in a single payment flow:- TypeScript
Validate your integration
Before shipping your Solana support implementation, verify these scenarios work correctly:SOL-only payment
Test a payment link that only offers Solana options. Verify that:
- The Solana option is presented to the user
- The transaction is signed correctly
- The base64-encoded signed transaction is submitted
- The payment completes successfully
Mixed EVM and Solana payment
Test a payment link that offers both EVM and Solana options. Verify that:
- Both option types are presented
- Users can select either network
- The correct signer is used for the selected option
- Payment completes regardless of which option is chosen
EVM flow regression
After adding Solana support, verify that existing EVM flows still work:
- USDC payments with EIP-3009
- USDT payments with Permit2
- Native token payments
Sample implementation
The React Native reference wallet demonstrates Solana support implementation:React Native
wallets/rn_cli_wallet — see PaymentStore.approvePayment for namespace dispatch logic and usePairing.handlePaymentLink for account concatenation.