Docs
What X Relay does, how a claim becomes an asset, and every address to check for yourself.
What it is
X Relay connects two things that do not usually meet: an X identity and an onchain asset. A payout, a tip or a partner payment addressed to a handle becomes a claim in the ledger. Sign in with X resolves that handle to an account id, and the claim routes into a token on Robinhood Chain.
Robinhood Chain is an Arbitrum L2 settling to Ethereum. Chain id 4663, ETH is the gas token, Chainlink feeds publish prices onchain, and stock tokens are ERC-20 contracts with 18 decimals issued by Robinhood Assets (Jersey) Limited with a uiMultiplier for corporate actions.
How a claim works
Four steps, and each one leaves something you can check.
- Deposit. On Send to a handle your own wallet signs a plain ETH transfer to the relay wallet with the UTF-8 bytes of
xrelay:@handleas the calldata. No partner and no API key. A partner with the relay API key can also callPOST /api/v1/claimsdirectly. - Verify. The page posts only the transaction hash to
POST /api/v1/deposits. The server reads the transaction and its receipt from chain 4663, checks the recipient is the relay wallet, checks the receipt status is a success, decodes the calldata into a handle against/^[a-z0-9_]{1,15}$/, and prices the ETH at the Chainlink ETH/USD round for that block. Nothing in the request body is trusted except the hash, and the same hash posted twice returns the first claim. - Claim. Sign in with X resolves the handle to an account id through OAuth 2.0 with PKCE. Only the account id, handle, name and avatar are kept, in a signed httpOnly cookie. The claims page reads the ledger under both the account id and the handle, so a deposit made before sign-in still lands.
- Settle. You pick a destination asset and a destination wallet, read the quote, and confirm. The relay wallet signs the settlement, waits for one confirmation and writes the transaction hash back onto the claim. Per-transaction and per-day caps are enforced inside the send path, not in the browser, and both are published by
/api/status.
Routing
Two venues fill a route on chain 4663.
- Uniswap v3 for stock tokens, commodity and RWA funds, WETH and USDG. QuoterV2 is called across the 0.01, 0.05, 0.3 and 1 percent tiers and the tier with the most output wins. SwapRouter02 fills it with
exactInputSingle, and ETH is paid as value so the router wraps it. - The Pons V2 curve for a Pons launch. The buy is simulated with eth_call first, then signed against the curve with the recipient set to your wallet.
Every minimum received is floored at 98 percent of the quote. An asset with no Chainlink feed is listed and marked, never given a number. A pair with no pool says so and the review button stays closed.
Fees
The relay fee is 0.5% of routed claim value, taken once when X Relay routes value it holds on behalf of an identity. It is a single constant, RELAY_FEE_BPS = 50, in api/_route.js.
A wallet-mode swap never touches the relay, so it pays no relay fee. It pays the pool fee of the tier it fills on and the gas of chain 4663, both shown in the quote before anything is signed.
A deposit to a handle pays no relay fee on the way in. The fee is taken once, at settlement, on the value routed out. The fee share stays in the relay wallet and is recorded per settlement as fee_eth. RELAY_FEE_SPLIT is the setting that will route that share once $XRELAY exists; until the token is issued there is nothing to route it into and the setting stays unused.
Verify on chain
| Contract | Address | Role |
|---|---|---|
| WETH | 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 | Wrapped ETH, the pool currency |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 | Dollar referenced token, 6 decimals |
| Pons V2 factory | 0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e | Emits every launch and its curve |
| Uniswap v3 factory | 0x1f7d7550b1b028f7571e69a784071f0205fd2efa | Resolves a pool for a pair and tier |
| QuoterV2 | 0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7 | Quotes exact input single hops |
| SwapRouter02 | 0xcaf681a66d020601342297493863e78c959e5cb2 | Fills the swap to your wallet |
| UniswapInterfaceMulticall | 0x282a3c4d320cc7f0d5eaf56b8029e4b88338f0a3 | Batches the balance and feed reads |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 | Approval transfer helper |
| UniversalRouter | 0x8876789976decbfcbbbe364623c63652db8c0904 | Router for combined actions |
| Relay wallet | reading /api/status | Receives deposits and signs settlements |
| $XRELAY | issuance pending | Token contract, published at issuance |
Risk
- Stock tokens are tokenized debt securities issued by Robinhood Assets (Jersey) Limited. They track an underlying, they are not the underlying share.
- A claim is a ledger entry until it settles on chain. Until a transaction hash exists, nothing has moved.
- Prices come from Chainlink feeds with a heartbeat. A feed that has not updated recently carries its own timestamp, shown next to the price.
- A Pons curve price moves with its reserves. A small curve moves a lot on a small buy.
- Not available to US persons.