What this looks like on Robinhood Chain
- Source: the intent transaction is an EVM transaction on Robinhood Chain (chain ID 4663).
ChainKeys.ROBINHOOD_MAINNET('robinhood') identifies the network everywhere in the SDK. - Reach: any solver-compatible asset on any SODAX network is a valid destination, 166 assets today. The on-Robinhood Chain asset list only bounds what users hold on Robinhood Chain itself, not what they can swap into.
- Tokens: ETH is the native gas token and uses the zero address in the SDK config. Every other asset, Stock Tokens included, is an ERC-20 token. Read addresses and decimals from the SDK config; never hard-code them.
- Settlement: output lands on the destination network at
dstAddress. Swaps into Robinhood Chain settle as ordinary token balances at the recipient’s address.
Approvals
swap() does not approve the input token for you. ETH is the native token and needs no approval. Every ERC-20 token does: the allowance is checked against SODAX’s asset manager on Robinhood Chain, so check it first and approve when it falls short.
params is the same intent params object you pass to swap().
Quoting
The solver API quotes both directions:getQuote deducts any configured partner fee before quoting, so quoted_amount is the net output the user actually receives.
Stock Tokens
The live config lists Robinhood Stock Tokens on Robinhood Chain for swaps, and marks each withisRwa: true. They are swap-only: none of them is in the money market list.
- SDK support:
@sodax/sdk2.1.0 does not include them. Its config does not list them, sogetQuoteandswapreject a Stock Token address on 2.1.0. They are onmainfor the next release; until then, quote and swap the base assets on Robinhood Chain. - Token standard: Stock Tokens are standard ERC-20s with 18 decimals, issued by Robinhood Assets (Jersey) Limited, so they follow the same approval flow as any ERC-20.
- Amounts are raw token amounts: Robinhood applies dividends and splits through an on-chain multiplier (
uiMultiplier(), ERC-8056) that changes how many shares one token represents without changing balances. SODAX amounts are token amounts; apply the multiplier only when you display share counts. - Offer restrictions: Robinhood’s Stock Tokens documentation states that Stock Tokens may not be offered, sold, or delivered in the United States or to U.S. persons, and that offers and sales are restricted in other jurisdictions. Check those terms before you surface Stock Tokens in your product.
Fees
Using SODAX is free to integrate. Two fees can apply to a trade:- Base fee: a fixed 0.1% of the input, taken by the protocol. Not configurable; compute it ahead of time with
getSolverFee(inputAmount). - Your fee: optional platform fee on top, set by you and paid to you. It is the only fee you control. Configure it at SDK setup and check it with
getPartnerFee(inputAmount). See Monetize SDK.
Executing
Preferswap(). It creates the intent on Robinhood Chain, verifies it landed, submits it to the relay, waits for the packet on the hub, and notifies the solver. The Quickstart has the complete call. Track progress with getStatus(request), and cancel unfilled intents with cancelIntent. Limit orders (intents without deadlines) work from Robinhood Chain too, via createLimitOrder.
Orchestrating manually with createIntent and submitIntent works the same as on any EVM network: Robinhood Chain intents need no relay extra data.
Error handling
Operations returnResult<T> instead of throwing. The core methods (swap, createIntent, postExecution) return a typed SodaxError union you can switch on by error.code.
Full reference, including raw mode, limit orders, cancellation, and the complete error-code table: Swaps.