> ## 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.

# Ethereum FAQ

> The questions Ethereum engineers actually ask about integrating SODAX.

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

No. SODAX's Ethereum spoke contracts 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.

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

Your user signs one transaction on Ethereum that creates an intent. The SODAX relayer carries proof of that transaction to the hub network (Sonic), a solver fills the intent on the destination network, and the output lands at the recipient address there. Swaps into Ethereum settle as ordinary ETH or ERC-20 balances at the recipient address. If an intent is never filled, it can be cancelled and the funds recovered.

#### Which assets are supported on Ethereum?

Two answers, and the difference matters. On Ethereum itself, <span data-sodax-config="count" data-metric="chain-swap-tokens" data-chain="ethereum">26</span> assets are live for swaps: ETH plus ERC-20 tokens. <span data-sodax-config="count" data-metric="chain-money-market-tokens" data-chain="ethereum">12</span> assets are live in the money market; that list is separate from the swap list, not a subset of it.

But your users are not limited to the Ethereum-side list. Every swap is cross-network, so from Ethereum 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](/ethereum/networks-and-assets).

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

For ERC-20 tokens, yes. SODAX's asset manager pulls them through the ERC-20 interface, so `isAllowanceValid` checks the allowance and `approve` sets it, the same as on any EVM network. Native ETH needs no approval.

#### Why did my user sign two approvals for USDT?

Because Ethereum USDT rejects an allowance change from one non-zero value to another. When the wallet already holds a smaller USDT allowance, the SDK's `approve` sends `approve(0)` first and then the real approval. The returned hash is the second one's. If you build unsigned transactions, use `buildApproveTxs`, which returns the reset as `resetTx` when it is needed: [USDT approvals](/ethereum/swaps#usdt-approvals).

#### How do I show the network fee before the user signs?

Build the transaction with `raw: true` (for example `createIntent` or `approve`), then pass it to `estimateGas` with `ChainKeys.ETHEREUM_MAINNET`. It returns gas units; multiply by the current fee per gas. See [Swaps on Ethereum: Fees](/ethereum/swaps#fees) and [Estimate Gas](/developers/how-to/estimate_gas).

#### Which RPC endpoint should I use?

Any Ethereum mainnet RPC. The SODAX config uses `https://eth.merkle.io`, a public endpoint; pass your own through `rpcUrl` on `EvmWalletProvider`, or per chain in the `@sodax/wallet-sdk-react` config.

#### Is there a testnet?

No. SODAX is mainnet-only on every network, Ethereum 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 Ethereum's network fees in ETH. 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 `'RELAY_TIMEOUT'`, `'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.