Skip to main content
Use this guide to add Robinhood tokenized stocks to your app with SODAX. Your users can buy a stock with a token they already hold, sell it back, and move it between Hedera, Stellar and Robinhood Chain. The guide covers how the tokens work, the order of the steps and the rules that matter. Signatures, types and full working code live in the references it links to, and those are what to copy from.

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 uses sodax.bridge.
On Hedera, the supply of each stock token is created in advance and held by the SODAX SpokeAssetManager contract (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/sdk package installed, plus @sodax/wallet-sdk-core (or @sodax/wallet-sdk-react in 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/api for Hedera and https://rpc.mainnet.chain.robinhood.com for Robinhood Chain; a dedicated node provider is better in production
  • A SODAX API key kept on your server. See API keys
SODAX is mainnet-only, so test with small amounts. See Is SODAX on Testnet?. The examples below use a Hedera wallet provider. In a browser, use the one your wallet connection gives you instead.

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:
  1. Find the stock tokens. Filter the supported tokens on a network with isRealWorldAsset to build a stocks list.
  2. Quote with sodax.swaps.getQuote.
  3. Apply your slippage to the quoted amount to get minOutputAmount. Never send 0n.
  4. Check and approve with sodax.swaps.isAllowanceValid and sodax.swaps.approve. On Stellar this sets up a trustline instead (see Stellar trustline).
  5. Execute with sodax.swaps.swap.
  6. 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 is 10_000_000n.
To sell, swap the two tokens round: the stock is 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

Build CreateIntentParams 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:
  1. Confirm the pair with sodax.bridge.isBridgeable. Two tokens are bridgeable when they share the same vault on Sonic.
  2. Check capacity with sodax.bridge.getBridgeableAmount. It returns the most that can move right now, with its own decimals: a DEPOSIT_LIMIT is in the source token’s units, a WITHDRAWAL_LIMIT in the destination token’s. Scale before you compare.
  3. Check and approve with sodax.bridge.isAllowanceValid and sodax.bridge.approve.
  4. Execute with sodax.bridge.bridge.
  5. Track with sodax.bridge.getDetailedStatus, using the source transaction hash.
The same flow works in every direction between Robinhood Chain, Hedera and Stellar. When Stellar is the destination, set up the trustline first, as in Stellar trustline. Error codes and the timeout model are in Bridge (SDK).

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.
The script below runs the check for AAPL with viem in Node.js 18 or later (save it as verify.mjs and run node verify.mjs). Swap in any other ticker’s addresses from Mainnet deployments.
You can also read the same balances in a block explorer: HashScan for Hedera and Robinhood Chain Blockscout for Robinhood Chain.
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

  1. 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, ETH or S), and a stock back out to USDC or S.
  2. 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.
  3. 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 decimals from the token object.
  4. Read tickers at runtime. Use getSupportedSolverTokens(chainKey).filter(isRealWorldAsset) for the swap list, and sodax.bridge.getBridgeableTokens for 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.
  5. Check the bridge limit before you bridge. getBridgeableAmount returns the most that can move right now. Disable the action, or cap the amount, when the user asks for more.
  6. 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, isAllowanceValid and approve handle it.
  7. 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.
  8. Stocks are not collateral. They cannot be supplied or borrowed against in the money market.
  9. Branch on result.ok, and discriminate on error.code. SDK operations return a Result and never throw, and error messages are not stable.
  10. 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?

This answer describes the setup as of 8 October 2026 and will be updated when the changes below are complete.
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 with sodax.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.

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.