What Are RWA Stocks?
Robinhood has deployed tokenized representations of traditional equities on their own Arbitrum Orbit L2 chain. Each stock is an ERC-20 token with standard metadata (name, symbol, decimals, totalSupply) that maps to a real-world equity.Robinhood Chain
An Arbitrum Orbit L2 (chain ID 46630) purpose-built for tokenized securities. Uses ETH as the native gas token.
1,997 Stocks
Deployed via a factory pattern with sequentially assigned contract addresses. Includes major US equities.
Chain Details
| Property | Value |
|---|---|
| Chain ID | 46630 |
| Chain Name | Robinhood Chain |
| Type | Arbitrum Orbit L2 |
| Native Token | ETH |
| RPC | https://rpc.testnet.chain.robinhood.com |
| Explorer | https://explorer.testnet.chain.robinhood.com |
| WebSocket Feed | wss://feed.testnet.chain.robinhood.com |
Robinhood Chain is currently in testnet. The RPC and explorer URLs will change when mainnet launches. The agent automatically uses the correct chain configuration.
How Token Discovery Works
Robinhood deployed stock tokens using a factory pattern, meaning contracts are created sequentially at predictable addresses. TheRwaAdapter discovers tokens by scanning these addresses:
Contract Scanning
ThescanContracts() method takes a list of candidate addresses and probes each one for ERC-20 metadata:
- Read metadata — calls
symbol(),name(),decimals(), andtotalSupply()on each address - Validate — contracts that respond with valid ERC-20 metadata are classified as stock tokens
- Activity check — tokens with
totalSupply > 0are marked as active - Cache results — discovered tokens are stored in an in-memory cache for fast subsequent lookups
MCP Tool: arb_rwa_scan
The MCP server exposes an arb_rwa_scan tool that wraps the scanner for use by the agent and external MCP clients. This tool:
- Accepts a range of contract addresses or a batch of known addresses
- Returns an array of
RwaStockInfoobjects with symbol, name, contract address, decimals, and activity status - Results are cached across invocations for the lifetime of the MCP server process
Stock Information
Each discovered token returns aRwaStockInfo object:
| Field | Type | Description |
|---|---|---|
symbol | string | Stock ticker symbol (e.g., “AAPL”, “TSLA”) |
name | string | Full stock name |
contractAddress | Address | ERC-20 contract address on Robinhood Chain |
chainId | number | 46630 (Robinhood Chain) |
decimals | number | Token decimals (typically 18) |
isActive | boolean | Whether the token has nonzero total supply |
totalSupply | bigint | Current total supply of the tokenized stock |
Registry Statistics
The adapter tracks aggregate statistics about the scanned registry:Querying Balances
Check how many shares of a tokenized stock an address holds:balanceOf on the Robinhood Chain.
Symbol Lookup
After scanning, you can search the cache by ticker symbol:Price Data
Price oracle integration is pending. Robinhood has not yet published oracle contract addresses for their chain. When available, the adapter will read prices from Chainlink-style feeds on Robinhood Chain.
getPrice(contractAddress) method is stubbed and will return null until oracle contracts are deployed. Current status of each stock can be inferred from the totalSupply and activity flags.
Example Prompts
SDK Reference
The RWA adapter is in the@arb-agent/adapters package as RwaAdapter.
Constructor
Methods
| Method | Description |
|---|---|
getStockInfo(address) | Fetch ERC-20 metadata for a single contract address |
getAvailableStocks(addresses) | Batch fetch metadata for multiple addresses |
scanContracts(addresses, concurrency) | Scan a range of addresses to discover stock tokens |
findBySymbol(symbol) | Search the cache by ticker symbol (case-insensitive) |
getBalance(address, owner) | Check token balance for an owner address |
getPrice(address) | Fetch token price (pending oracle deployment) |
getAllCached() | Return all discovered stock tokens from the cache |
getRegistryStats() | Return total/active/inactive counts |