What it is
Robinhood issues tokenized stocks, ETFs and commodity funds on its own network, Robinhood Chain. Each one is an ordinary token named “<Company> • Robinhood Token”, for example “Apple • Robinhood Token” (AAPL). SODAX makes the same stocks available on Hedera and Stellar, so your users can hold and trade them without leaving the network they already use. SODAX uses a hub-and-spoke design. Sonic is the hub, where the core contracts run. Every other network is a spoke that holds assets locally. For background, read Hub and spoke: how SODAX works. Three facts shape the integration:- Every Hedera stock token is backed 1:1 by the real Robinhood token. The real tokens are locked in the SODAX SpokeAssetManager contract on Robinhood Chain. The SpokeAssetManager is the SODAX contract on each spoke that holds deposits and pays out withdrawals.
- Each ticker is one vault token on Sonic. A vault token is a single token on the hub that wraps the versions of the same asset from different networks. AAPL on Robinhood Chain, Hedera and Stellar all wrap into the one AAPL vault token, and that shared vault is what lets a stock move between the three networks. See Vault Token.
- Stocks are swap assets. A stock quotes and executes like any other token, through
sodax.swaps. Moving the same stock from one network to another usessodax.bridge.
0x0df73542cC68bDC01b361d231c60F726B0e0bC05, Hedera account 0.0.10495847). So the supply in users’ hands is the token’s total supply minus what that contract still holds. The same contract address holds the locked Robinhood tokens on Robinhood Chain. Hedera stock tokens use Hedera’s native token service (HTS), have 8 decimals, and have no KYC, freeze, wipe or pause keys.
Live tickers and networks
24 tickers are live. Read the list at runtime rather than hard-coding it, because tickers are added over time (see Gotchas).
Every address is in Mainnet deployments: Robinhood Tokenized Equities and in
@sodax/types, which @sodax/sdk re-exports. Read addresses from the package in code rather than copying them from a page. Only tickers with a Chainlink price feed on Robinhood Chain are listed, so some Robinhood tokens (for example DJT, RDDT and GLD) are not available.
Stocks are swap assets only. They are not money-market reserves, so users cannot supply them, borrow against them or use them as collateral.
Choose a path
Set up
Sodax and a wallet provider first, as in Configure the SDK and Wallet providers. Hedera and Robinhood Chain are EVM networks, so both use IEvmWalletProvider. Stellar uses IStellarWalletProvider.
Prerequisites
Before you begin, ensure you have:- The
@sodax/sdkpackage installed, plus@sodax/wallet-sdk-core(or@sodax/wallet-sdk-reactin a React app) for wallet providers - A wallet on the network your user starts from, with enough of the native token to pay network fees (HBAR on Hedera, XLM on Stellar, ETH on Robinhood Chain)
- RPC URLs for the networks you use. The SDK defaults are
https://mainnet.hashio.io/apifor Hedera andhttps://rpc.mainnet.chain.robinhood.comfor Robinhood Chain; a dedicated node provider is better in production - A SODAX API key kept on your server. See API keys
Swap path: buy or sell a stock
A stock swap is the same flow as Make a swap (SDK). Follow that guide for the full detail. The steps are:- Find the stock tokens. Filter the supported tokens on a network with
isRealWorldAssetto build a stocks list. - Quote with
sodax.swaps.getQuote. - Apply your slippage to the quoted amount to get
minOutputAmount. Never send0n. - Check and approve with
sodax.swaps.isAllowanceValidandsodax.swaps.approve. On Stellar this sets up a trustline instead (see Stellar trustline). - Execute with
sodax.swaps.swap. - Track with
sodax.swaps.getDetailedStatus, using the source transaction hash, until the swap reaches a final status.
Step 1: Find the stock tokens
XToken.isRwa === true marks a registered tokenized stock, ETF or commodity. isRealWorldAsset({ chainKey, address }) resolves the same flag for token data that comes from an API.
Step 2: Quote a buy
This example buys AAPL on Hedera with USDC on Hedera. Amounts are always in the token’s smallest unit: USDC on Hedera has 6 decimals, so 10 USDC is10_000_000n.
token_src and a stablecoin or native token is token_dst. The source and destination can be on different networks, for example USDC on Arbitrum into AAPL on Hedera.
Steps 3 to 6: Approve, execute and track
BuildCreateIntentParams from the quote, then approve, swap and track exactly as in Make a swap (SDK). The only stock-specific parts are the token addresses and the chain keys.
Bridge path: move a stock back to Robinhood Chain
Because every token is backed 1:1, a user holding a stock on Hedera can bridge it back to Robinhood Chain at any time and receive the real Robinhood token. You can offer that in your own app. Under the hood, the user deposits the Hedera token into the SODAX SpokeAssetManager on Hedera. That creates the matching hub asset on Sonic, which wraps into the stock’s vault token. The vault token is then withdrawn to Robinhood Chain, where the user receives the real Robinhood token from the SODAX contract there.sodax.bridge.bridge() runs all of this in one call.
The steps are:
- Confirm the pair with
sodax.bridge.isBridgeable. Two tokens are bridgeable when they share the same vault on Sonic. - Check capacity with
sodax.bridge.getBridgeableAmount. It returns the most that can move right now, with its owndecimals: aDEPOSIT_LIMITis in the source token’s units, aWITHDRAWAL_LIMITin the destination token’s. Scale before you compare. - Check and approve with
sodax.bridge.isAllowanceValidandsodax.bridge.approve. - Execute with
sodax.bridge.bridge. - Track with
sodax.bridge.getDetailedStatus, using the source transaction hash.
dapp-kit hooks
Each SDK step has a matching@sodax/dapp-kit hook. Mutations expose mutateAsyncSafe, which returns a Result instead of throwing.
For parameters and polling behaviour, read each hook’s source and the
@sodax/dapp-kit reference.
Verify backing on-chain
There is no separately published proof of reserves, but anyone can check the backing on-chain. For each ticker, compare:- Supply in users’ hands on Hedera: the token’s total supply minus what the SODAX Hedera contract (
0x0df73542cC68bDC01b361d231c60F726B0e0bC05) still holds. - Locked on Robinhood Chain: what the same address holds of the real Robinhood token.
verify.mjs and run node verify.mjs). Swap in any other ticker’s addresses from Mainnet deployments.
This script checks Hedera only. The same locked tokens also back that ticker on Stellar (7 decimals), so full backing means the locked balance covers the Hedera and Stellar circulating supply combined. A
true here does not prove that on its own. Gotchas
- Route through a stablecoin or native token. Each stock trades only against USDG on Robinhood Chain, so every route passes through USDG. The best-supported swaps are a stablecoin or native token into a stock (for example
USDC,USDT,ETHorS), and a stock back out toUSDCorS. - Stock-to-stock swaps may fail. They route stock → USDG → stock and only quote above a small minimum size. A stock on one spoke into another stock on a spoke (for example Hedera AAPL into Hedera NVDA) can need more hops than the router allows and return “no path”. Sell into a stablecoin first, then buy.
- Mind the decimals. The same stock has 18 decimals on Robinhood Chain, 8 on Hedera and 7 on Stellar. Amounts are always in the source token’s smallest unit, so read
decimalsfrom the token object. - Read tickers at runtime. Use
getSupportedSolverTokens(chainKey).filter(isRealWorldAsset)for the swap list, andsodax.bridge.getBridgeableTokensfor bridge targets. Appearing in the vault registry is not proof that a feature is live; the backend config decides. New registry entries need an SDK update. - Check the bridge limit before you bridge.
getBridgeableAmountreturns the most that can move right now. Disable the action, or cap the amount, when the user asks for more. - Stellar needs a trustline to receive. When Stellar is the destination, check and create the trustline before you swap or bridge. When Stellar is the source,
isAllowanceValidandapprovehandle it. - Hedera token association. [TO CONFIRM] Whether a Hedera account must associate a stock token before it can receive it, and whether the SDK or the user’s wallet handles that. Nothing in the SDK docs covers it today.
- Stocks are not collateral. They cannot be supplied or borrowed against in the money market.
- Branch on
result.ok, and discriminate onerror.code. SDK operations return aResultand never throw, and error messages are not stable. - Keep API keys on the server. A key in a browser bundle is public. See API key good practices.
Build it with an AI agent
Install the@sodax/skills bundle before you start the agent, and connect the Builders MCP so it can read live tokens and quotes. Then describe the task plainly, for example “Add a stocks tab that lets a Hedera user buy AAPL with USDC using @sodax/dapp-kit”. Check what the agent produces against the Gotchas.
FAQ
1. Which stocks are live, and on which networks?
24 tickers are live on Robinhood Chain, Hedera and Stellar, with one vault token per ticker on Sonic. The full list is in Live tickers and networks, and every address is in Mainnet deployments.2. Is every Hedera stock token backed 1:1?
Yes. Every stock token on Hedera is backed 1:1 by the real Robinhood token, locked in the SODAX contract on Robinhood Chain. There is no separately published proof of reserves, but anyone can verify the backing on-chain. Compare the Hedera supply held outside the SODAX Hedera contract (0x0df73542cC68bDC01b361d231c60F726B0e0bC05) with what that same address holds of each token on Robinhood Chain. Verify backing on-chain has a script that does this.
3. Who controls the admin and supply key, and what stops unbacked minting?
Today the key is a single key. SODAX is moving it to a multisig, the same setup used on all its other networks, and expects to finish next week. SODAX is also adding rate-limiter contracts to these assets now, as on its other assets. They act as a circuit breaker if the backing suddenly changes, and they set daily limits on what moves in and out. The limits start deliberately tight.4. Do Robinhood’s investor protections apply to Hedera holders, and what is the path back?
Because every token is backed 1:1, anyone holding a stock on Hedera can bridge it back to Robinhood Chain at any time and receive the real Robinhood token. Builders can offer that bridge in their own app with SODAX. See the Bridge path.5. What happens if the SODAX vault on Robinhood Chain were frozen?
SODAX runs sanctions screening across its infrastructure and is verified on the platforms that require it. Robinhood makes these assets available through liquidity providers, and SODAX sources the assets from them. A freeze would hurt Robinhood’s own chain and product, so SODAX considers it very unlikely.6. What fees apply?
A stock swap pays the same fees as any SODAX swap: the 0.1% solver fee, plus your own partner fee if you set one. See Monetize SDK. Bridges can carry a partner fee too, which you can preview withsodax.bridge.getFee. [TO CONFIRM] Whether the stock vault tokens charge any deposit or withdrawal fee.
7. Are there limits on how much can move?
Yes.sodax.bridge.getBridgeableAmount returns the most that can be bridged right now, and stock-to-stock swaps only quote above a small minimum size. Daily limits from the rate limiters also apply (see question 3). [TO CONFIRM] The current daily limit values, if SODAX wants to publish them.
Related
Make a swap (SDK)
Every step of an SDK swap, with allowance, status and error handling.
Bridge (SDK)
Every
sodax.bridge method, error code and type.Mainnet deployments
Every stock token, hub asset and vault address.
Vault Token
How one token on Sonic wraps the same asset from many networks.