Robinhood ChainTessera
Documentation

Docs

How Tessera finds routes, what it signs on your behalf, and the contracts it talks to.

Introduction

Tessera documentation

Tessera is a swap interface for Robinhood Chain. It does not run pools, hold balances or take custody. Quotes come from the Uniswap v4 Quoter and trades execute through the Uniswap Universal Router, both deployed by Uniswap on Robinhood Chain.

Robinhood Chain is an Arbitrum Orbit Layer 2 on Ethereum. It uses ETH for gas.

WalletYou choose tokens and an amount.
TesseraFinds pools, quotes paths and splits the order.
UniswapUniversal Router swaps through v4 pools.
ChainRobinhood Chain settles and returns tokens.
Start

Network setup

MainnetChain ID 4663 · ETH · https://rpc.mainnet.chain.robinhood.com
Mainnet explorerrobinhoodchain.blockscout.com
Robinhood connection guide
Public RPCs are rate limited. For production, set NEXT_PUBLIC_RPC_MAINNET to a dedicated endpoint from a provider such as Alchemy, QuickNode or Chainstack.
Start

Making a swap

  1. Connect your wallet. If it is on another network, Tessera asks it to switch.
  2. Pick the token you pay and the token you receive. Press / to open token search.
  3. Enter an amount. Quotes refresh every 15 seconds; the ring shows time to the next refresh.
  4. Press Swap and review. The first time you sell an ERC-20, your wallet asks for two approvals: the token to Permit2, then Permit2 to the Universal Router. After that each swap is one transaction.
  5. Tessera simulates the swap, then asks your wallet to sign. The receipt links to the explorer.

ETH ↔ WETH is handled by the WETH contract directly (wrap and unwrap), with no pool or fee.

Concepts

How routing works

For a pair, Tessera computes the v4 pool ID for each standard fee tier (0.01%, 0.05%, 0.30%, 1.00%) with no hooks, and reads getSlot0 and getLiquidity from StateView to see which pools exist. It does the same for two-hop paths through ETH, WETH and USDG.

  • Quote. Each candidate path is quoted with quoteExactInput on the v4 Quoter, which runs the real swap math against current pool state.
  • Split. If the two best paths use different pools, Tessera tries 50/50 through 90/10 splits and keeps the split only if it beats the single path by more than 5 bps.
  • Execute. All legs are encoded as SWAP_EXACT_IN actions inside one V4_SWAP command, followed by SETTLE_ALL and TAKE_ALL. The minimum output is enforced on the total, so slippage protection covers the whole order.

Pools with hooks and v2/v3 pools are not searched in this version. See the FAQ for adding the Uniswap Trading API, which covers every pool type and UniswapX.

Concepts

Tokenized stocks

Stock tokens on Robinhood Chain are ERC-20 tokens that track a listed share or ETF. Pools trade them 24/7, while the underlying stock trades only during exchange hours.

  • Outside US market hours (9:30 to 16:00 New York time, weekdays), pool prices can drift from the last exchange price. Tessera shows the session state on the Swap page.
  • Tessera does not maintain a wallet allowlist. Stock Tokens use standard ERC-20 contracts, but their offering and transfer rules still apply. Robinhood’s documentation says they are not for U.S. persons and describes restrictions in certain jurisdictions. Check the issuer’s current prospectus and jurisdiction list to determine whether you may receive a token.
  • If a swap fails, refresh the quote for a price or deadline error. For stock tokens, also check whether that asset is tradable in the current session, and verify pool liquidity, token balance, approvals, and ETH for gas. If the contract rejects your wallet under issuer rules, retrying will not remove that restriction.
  • Corporate actions such as splits and dividends are handled by the issuer, not by Tessera or Uniswap.
Concepts

Fees and slippage

Tessera interface feeConfigurable with NEXT_PUBLIC_FEE_BIPS and NEXT_PUBLIC_FEE_RECIPIENT (max 1%). Taken from the output token with Uniswap's TAKE_PORTION action. Default 0.
Uniswap pool feeSet by each pool. Shown per hop in the routing panel.
Network costPaid in ETH, shown in dollars before you sign.
Default slippage0.5%. The swap reverts if you would receive less than the minimum shown.
Build

Contract addresses

Mainnet addresses used by this build. Uniswap contracts come from Uniswap's v4 deployments page; WETH and Permit2 from Robinhood's protocol contracts page. Check them on the explorer before each release.

universalRouter0x204FAca1764B154221e35c0d20aBb3c525710498
quoter0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94
stateView0xF3334192D15450CdD385c8B70e03f9A6bD9E673b
poolManager0x8366a39CC670B4001A1121B8F6A443A643e40951
permit20x000000000022D473030F116dDEE9F6B43aC78BA3
weth0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73

Tokens

WETH · crypto0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
USDG · stable0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
TSLA · stock0x322F0929c4625eD5bAd873c95208D54E1c003b2d
NVDA · stock0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC
AAPL · stock0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9
AMZN · stock0x12f190a9F9d7D37a250758b26824B97CE941bF54
MSFT · stock0xe93237C50D904957Cf27E7B1133b510C669c2e74
GOOGL · stock0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3
META · stock0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35
MSTR · stock0xec262a75e413fAfD0dF80480274532C79D42da09
SPY · stock0x117cc2133c37B721F49dE2A7a74833232B3B4C0C
QCOM · stock0x0f17206447090e464C277571124dD2688E48AEA9
QQQ · stock0xD5f3879160bc7c32ebb4dC785F8a4F505888de68
AMD · stock0x86923f96303D656E4aa86D9d42D1e57ad2023fdC
NFLX · stock0xE0444EF8BF4eD74f74FD73686e2ddF4C1c5591E8
PLTR · stock0x894E1EC2D74FFE5AEF8Dc8A9e84686acCB964F2A
COIN · stock0x6330D8C3178a418788dF01a47479c0ce7CCF450b
AVGO · stock0x156E175DD063a8cE274C50654eF40e0032b3fbcF
ORCL · stock0xb0992820E760d836549ba69BC7598b4af75dEE03
INTC · stock0xc72b96e0E48ecd4DC75E1e45396e26300BC39681
MU · stock0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD
TSM · stock0x58FfE4a942d3885bAa22D7520691F611EF09e7AA
BABA · stock0xad25Ac6C84D497db898fa1E8387bf6Af3532a1c4
SHOP · stock0xF53F66751B1Eff985311b693531E3290F600c410
CRM · stock0xd95B44124e475743a7589e68F3D74008A5536D44
ADBE · stock0x232B8ed6377BE97813853B0Ac104c4Cda8378d1B
COST · stock0x4EA005168D7F09a7A0Ba9D1DEf21a479950E44C2
LLY · stock0x8005d266423c7ea827372c9c864491e5786600ea
JNJ · stock0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80
UNH · stock0xcF364ea52787e289De6F32077834056E3E70D6A8
XOM · stock0xf9B46d3D1B22199D4D1025a9cEDB540A33F1a2d5
PFE · stock0x7066A64c24e4206CD62E83bf198c1E7EB361F51e
GME · stock0x1b0E319c6A659F002271B69dB8A7df2F911c153E
AMC · stock0x05a3d1Cd21d0C88145E82600E62e7E496e0F222B
RDDT · stock0x05b37Fb53A299a1b874A619e1c4C404D52C36F4C
RBLX · stock0xF0C4BF4C582cb3836e98394b1d4e7B7281101bE8
SNAP · stock0xF6589F11Bc40b669e584073F428B05562F568733
SOFI · stock0x98E75885157C80992A8D41b696D8c9C6Fb30A926
RIVN · stock0xB1BF26c1D20ff267A4f93550d1E0d06ac40a114B
F · stock0x25C288E6D899b9BC30160965aD9644c67e73bE0C
IBM · stock0x980dcf6766FA79f5Cf0c4AAdb3ab477ff15a9619
NOW · stock0x0C3260aF4B8f13a69c4c2dFb84fD667890CDFa14
CSCO · stock0xF543967EEBB6f1917992eF0E68De63ab07a5a0dA
GLD · stock0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e
SLV · stock0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f
CRCL · stock0xdF0992E440dD0be65BD8439b609d6D4366bf1CB5
SNOW · stock0xBa0CAB75495255d0cB58E22B648bFED4ECD1F47E
DDOG · stock0x27c99fBde9D0d2AA4f4Bfb4943f237843DdF6958
NET · stock0x116F00968269B7bfbaD4109cE591d6E74c0601d4
ASML · stock0x47F93d52cBeC7C6D2CfC080e154002370a60dAEA
APP · stock0xA249BAF1063Af884807C1E1400AEf7784836917E
SMCI · stock0xc01aA1fECeC0605b13bc84874ff7256C0f5F562a

Every token is checked on-chain when the app loads. A token whose contract is missing or whose symbol doesn't match is hidden and logged to the browser console.

Build

Integrate with viem

import { defineChain, createPublicClient, http } from 'viem'

export const robinhood = defineChain({
  id: 4663,
  name: 'Robinhood Chain',
  nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
  rpcUrls: { default: { http: ['https://rpc.mainnet.chain.robinhood.com'] } },
  blockExplorers: { default: { name: 'Blockscout', url: 'https://robinhoodchain.blockscout.com' } },
})

export const client = createPublicClient({ chain: robinhood, transport: http() })

Quote a path on the v4 Quoter

const { result: [amountOut, gasEstimate] } = await client.simulateContract({
  address: '0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94',
  abi: v4QuoterAbi,
  functionName: 'quoteExactInput',
  args: [{
    exactCurrency: ETH,               // 0x000…000 for native ETH
    path: [{ intermediateCurrency: USDG, fee: 500, tickSpacing: 10, hooks: zeroAddress, hookData: '0x' }],
    exactAmount: parseEther('1'),
  }],
})

The routing and encoding code lives in src/lib/router.ts and src/lib/v4.ts.

Build

Deploying the app

npm install
# Configure NEXT_PUBLIC_RPC_MAINNET and NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID in .env.local
npm run build
npm run start

Vercel detects Next.js from this project. Other Node hosts can use npm run build and npm run start. The app is configured for Robinhood Chain mainnet.

Reference

FAQ

Does Tessera hold my tokens?

No. Swaps go from your wallet to the Uniswap Universal Router and back in one transaction.

Why does a pair show "No route with liquidity"?

No hookless v4 pool exists for that pair or through ETH, WETH or USDG at the standard fee tiers. The pair may trade on v2, v3, a hooked pool, or only through UniswapX.

Can I get every Uniswap pool and UniswapX?

Yes, by switching the quote source to the Uniswap Trading API, which lists Robinhood Chain as supported. Call it from a small server route so your API key stays private, and pass its calldata to the wallet in place of the app's routing encoder.

Is there MEV protection?

Robinhood Chain uses an Arbitrum-style sequencer that orders transactions first come, first served, with no public mempool to front-run. Your slippage limit still protects you from price moves.

Reference

Risks

  • Smart contracts can have bugs. Tessera relies on Uniswap contracts and on the token contracts you trade.
  • Stock tokens may not carry shareholder rights and may be unavailable in some jurisdictions.
  • Prices on this site come from pool state and can differ from exchange prices, especially when the market is closed.
  • Nothing on this site is investment advice.