Skip to main content
Solana We support onramps, offramps and swaps on Solana. Solana needs the least per-transaction setup of the supported networks: there are no trustlines, and network fees are negligible. The end-to-end flows are in the Onramps, Offramps and Swaps guides.

Supported operations

Asset identifiers

Solana assets use the Base58 mint address, for example AvvetPGuuB5FD5m86fpw3LtDKyQoUFT1mG9WarNQLW4q.
Read the mint, the token’s asset, from GET /supported_assets?chain=solana (or the public GET /lookup/stablebonds). Do not hardcode it; mints differ between sandbox and production.

Stablebond addresses

Live mint accounts for every stablebond on Solana, each linked to Solscan:

Register a Solana wallet

Register the wallet as a payment account with accountDetails of kind address and chain solana. Set $ORGANIZATION_ID to the organization that owns the wallet: your own organization or a customer organization. See Organizations in the route.
Use the returned id as the source or destination of a quote.

Wallet and gas

Solana has no trustline or account-reserve step. Network fees are a tiny fraction of a cent. On an offramp or swap, the customer’s wallet pays the fee for the funding transaction. The prepared transaction only transfers the tokens; our receiving wallet’s token account already exists.

Offramps and swaps: fund the order

For an offramp or swap from a Solana wallet, fundingInstructions.destination.address is the address to pay. The source asset is an SPL token. Fund the order in one of two ways:
  1. Sign the prepared transaction. preparedTransaction.transaction is an unsigned v0 transaction, base64-encoded in Solana’s wire format. The customer’s wallet is the fee payer and the only signer. Sign it and submit it.
  2. Send the tokens yourself. Send the order’s source.amount of source.asset to address.
Decode it as a versioned transaction, for example with VersionedTransaction.deserialize in @solana/web3.js. Transaction.from reads only legacy transactions. The prepared transaction uses a recent blockhash, so it goes stale. After preparedTransaction.refreshAfter, about 60 seconds after we build it, call POST /organization/{organizationId}/order/{id}/funding_instructions/refresh. It returns the order as it is. The new funding instructions arrive a moment later in an orderUpdated webhook, and on GET .../order/{id}. Every refresh builds a new transaction. Until the old one’s blockhash expires, both can land, so have the customer sign and submit only the newest one.

Swaps

A swap on Solana is an order between two Solana wallet accounts. Track it like any other order: read GET /organization/{organizationId}/order/{id}, or subscribe to orderUpdated. The status moves created → funded → completed. See Swaps.

Onramps

Offramps

Swaps