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

> ## Agent Instructions
> SODAX is mainnet-only (no testnet chains or RPC endpoints exist) with a hub-and-spoke architecture; Sonic is the hub. SODAX is non-custodial protocol/software: it routes and settles; independent solvers on the marketplace fill — never say 'our solver', 'the SODAX solver', that SODAX trades, takes custody, or fills orders. For frontend/React integrations, prefer @sodax/dapp-kit hooks over calling @sodax/sdk directly. SDK operations — the methods that build, submit or await a transaction, and the API/quote calls — return Result<T, E> ({ ok: true, value } or { ok: false, error }): check result.ok, never wrap them in try/catch or branch on error.message; discriminate on the narrow error.code union instead. Synchronous config getters (getPartnerFee, getSupportedSwapTokens, getVault, ...) return their value directly, not a Result.

# Sonic FAQ

> The questions Sonic engineers actually ask about integrating SODAX on its hub network.

#### Do I need to write or deploy a contract?

No. Sonic is the SODAX hub, and the hub contracts (intents, money market, wallet factory and router) are already deployed; your integration is TypeScript against `@sodax/sdk` (or the React packages on top of it). You write no on-chain code and hold no admin key for any part of the flow.

#### What does "Sonic is the hub" mean for my integration?

Swap intents are registered on Sonic and their fills are recorded there, and the money market reserves and every user's positions live on Sonic. Users on other networks reach the hub through the SODAX relayer. Users on Sonic do not need it: the transaction they sign is the hub transaction. Your code is the same either way; the SDK skips the relay step when `srcChainKey` is `ChainKeys.SONIC_MAINNET`.

#### How does a swap from Sonic actually settle?

Your user signs one EVM transaction on Sonic that creates an intent on the hub intents contract. There is no relay leg, so the solver is notified about that same transaction. A solver fills the intent on the destination network, and the output lands at the recipient address there. If an intent is never filled, it can be cancelled with one Sonic transaction and the funds recovered.

#### Which assets are supported on Sonic?

Two answers, and the difference matters. On Sonic itself, <span data-sodax-config="count" data-metric="chain-swap-tokens" data-chain="sonic">63</span> assets are live: S and Sonic tokens such as wS, USDC, and SODA, plus the hub's own tokens, such as the `soda*` vault tokens. <span data-sodax-config="count" data-metric="chain-money-market-tokens" data-chain="sonic">36</span> of these also work in the money market, native S included.

But your users are not limited to the Sonic-side list. Every swap is cross-network, so from Sonic they can reach all <span data-sodax-config="count" data-metric="swap-tokens">166</span> assets across every SODAX-supported network. Both lists grow as the backend config adds them; read them from `sodax.config` at runtime, or see the live tables in [Networks & Assets](/sonic/networks-and-assets).

#### Is there an approve step before swapping or supplying?

For ERC-20 tokens, yes, and the spender depends on the module. Swaps approve the SODAX intents contract on Sonic; money market supply and repay approve the user's hub wallet. `isAllowanceValid` checks the right one and `approve` sets it, so an allowance for one module does not cover the other. Native S needs no approval in either.

#### Why does a user's money market position not show up under their address?

Positions are held by the user's hub wallet, not by their address directly. On Sonic that wallet is derived from the user's Sonic address through the SODAX wallet router; acting from another network, the same address gets a different hub wallet. Read positions with `sodax.moneyMarket.data.getUserReservesHumanized(ChainKeys.SONIC_MAINNET, userAddress)` and the SDK resolves it. See [Hub wallets](/sonic/money-market#hub-wallets).

#### Where do my partner fees go?

To a Sonic address, whichever network your users trade from. Fees accrue there as hub tokens, and `sodax.partners.feeClaim` lists, converts, and claims them from Sonic. See [Monetize SDK](/developers/how-to/monetize_sdk).

#### Which RPC endpoint should I use?

Any Sonic mainnet RPC. The SODAX config uses Sonic's public endpoint, `https://rpc.soniclabs.com`; Sonic documents that it limits requests per second and batch size. Pass your own through `rpcUrl` on `EvmWalletProvider`, or per chain in the `@sodax/wallet-sdk-react` config. The SDK's hub provider also reads Sonic for every integration, whatever network your users are on, for example to resolve hub wallets; set its endpoint with `new Sodax({ hub: { rpcUrl } })`.

#### Is there a testnet?

Sonic has one; SODAX does not. SODAX is mainnet-only on every network, Sonic included.

#### What does it cost?

Using SODAX is free: no license, no integration fee, no SDK cost. Trades carry a fixed 0.1% base fee taken by the protocol; on top of that you set your own platform fee and keep it. Your users also pay Sonic's network fees in S. See [Monetize SDK](/developers/how-to/monetize_sdk).

#### How do I know if something went wrong?

SDK operations return `Result<T>` rather than throwing. Core swap and money market methods return typed error codes (for example `'TX_VERIFICATION_FAILED'`, `'EXECUTION_FAILED'`) you can branch on, with structured context attached.

#### Where are the audits?

Audits for the SODAX protocol are collected on the [Audits](/developers/audits) page.

#### Can my AI coding assistant do the integration?

Largely, yes. Add the [SODAX Builders MCP](/builders-mcp) to Claude, Cursor, VS Code, Windsurf, or any MCP-capable client (`https://builders.sodax.com/mcp`) and it gets live access to the SODAX System: chains, tokens, swap quotes, money market rates, intent history, and auto-synced SDK docs. Use it to scope the integration against your own codebase first, then to write and verify the code. Setup per client is at [builders.sodax.com](https://builders.sodax.com/).

#### I want a plan specific to my protocol. Who do I talk to?

Reach the SODAX team through any platform listed at [linktr.ee/go.sodax](https://linktr.ee/go.sodax).


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