> ## Documentation Index
> Fetch the complete documentation index at: https://docs.etherfuse.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Solana

> Asset identifiers, wallet registration, gas handling, and swap support on Solana.

![Solana](https://mintcdn.com/etherfuse/XRSchVFGUgreQatD/img/chains/solana.svg?fit=max\&auto=format\&n=XRSchVFGUgreQatD\&q=85\&s=6018dc319aab06dfc6ee3da2de48c522)

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](https://docs.etherfuse.com/v2/guides/testing-onramps.md), [Offramps](https://docs.etherfuse.com/v2/guides/testing-offramps.md) and [Swaps](https://docs.etherfuse.com/v2/guides/testing-swaps.md) guides.

## Supported operations

| Operation | Supported |
| - | - |
| Onramp (fiat → token) | ✓ |
| Offramp (token → fiat) | ✓ |
| Swap (token → token) | ✓ |

## Asset identifiers

Solana assets use the **Base58 mint address**, for example `AvvetPGuuB5FD5m86fpw3LtDKyQoUFT1mG9WarNQLW4q`.

> [!TIP]
>
> Read the mint, the token's `asset`, from [`GET /supported_assets?chain=solana`](https://docs.etherfuse.com/v2/api-reference/assets/list-supported-assets) (or the public [`GET /lookup/stablebonds`](https://docs.etherfuse.com/v2/api-reference/lookup/list-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](https://docs.etherfuse.com/v2/overview.md#organizations-in-the-route).

```bash theme={null}
curl -X POST https://api.sand.etherfuse.com/organization/$ORGANIZATION_ID/payment_account \
  -H "Authorization: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "wallet",
    "label": "Solana wallet",
    "accountDetails": {
      "kind": "address",
      "address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
      "chain": "solana"
    }
  }'
```

Use the returned `id` as the `source` or `destination` of a [quote](https://docs.etherfuse.com/v2/api-reference/quotes/create-quote.md).

## 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`](https://docs.etherfuse.com/v2/api-reference/orders/refresh-funding-instructions). It returns the order as it is. The new funding instructions arrive a moment later in an `orderUpdated` webhook, and on [`GET .../order/{id}`](https://docs.etherfuse.com/v2/api-reference/orders/get-order).

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}`](https://docs.etherfuse.com/v2/api-reference/orders/get-order), or subscribe to [`orderUpdated`](https://docs.etherfuse.com/v2/api-reference/webhook-events/orderupdated). The status moves `created` → `funded` → `completed`. See [Swaps](https://docs.etherfuse.com/v2/guides/testing-swaps.md).

## Related

> [card] [Onramps](https://docs.etherfuse.com/v2/guides/testing-onramps.md)

> [card] [Offramps](https://docs.etherfuse.com/v2/guides/testing-offramps.md)

> [card] [Swaps](https://docs.etherfuse.com/v2/guides/testing-swaps.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.