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.
Network setup
| Mainnet | Chain ID 4663 · ETH · https://rpc.mainnet.chain.robinhood.com |
| Mainnet explorer | robinhoodchain.blockscout.com |
NEXT_PUBLIC_RPC_MAINNET to a dedicated endpoint from a provider such as Alchemy, QuickNode or Chainstack.Making a swap
- Connect your wallet. If it is on another network, Tessera asks it to switch.
- Pick the token you pay and the token you receive. Press
/to open token search. - Enter an amount. Quotes refresh every 15 seconds; the ring shows time to the next refresh.
- 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.
- 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.
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
quoteExactInputon 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_INactions inside oneV4_SWAPcommand, followed bySETTLE_ALLandTAKE_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.
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.
Fees and slippage
| Tessera interface fee | Configurable 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 fee | Set by each pool. Shown per hop in the routing panel. |
| Network cost | Paid in ETH, shown in dollars before you sign. |
| Default slippage | 0.5%. The swap reverts if you would receive less than the minimum shown. |
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.
Tokens
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.
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.
Deploying the app
npm install
# Configure NEXT_PUBLIC_RPC_MAINNET and NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID in .env.local
npm run build
npm run startVercel 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.
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.
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.