Contracts and addresses
The onchain pieces (V2 clearing, vault, router and venue adapters), what each one does, and where they are deployed on Robinhood Chain.
Network
| Chain | Robinhood Chain, chain id 4663 |
| RPC | https://rpc.mainnet.chain.robinhood.com |
| Explorer | robinhoodchain.blockscout.com |
| Gas token | ETH |
Addresses
Current deployment (current, V2): clears Robinhood Stock Tokens and Pons V2 launch curves through one router. Deployed from block 72,249,552. The four NoFomo contracts are source-verified on Sourcify with an exact match.
| Contract | Address |
|---|---|
| BlockClearingV2 | 0x7494D1Ed18FbA9B9c90aa4eE41F3eAf794E44D61 (opens Blockscout in a new tab)Sourcify (exact match)Price guard 300 bps, grace 15 min, fee 10 bps |
| MandateVaultV2 | 0xD503e111Fa36F31CfD2d68683f13AbeBF8741d8D (opens Blockscout in a new tab)Sourcify (exact match) |
| VenueRouter | 0x71EA6e782F40791af295860277a8b44564CDe4EB (opens Blockscout in a new tab)Sourcify (exact match)The venue both contracts pin. No admin. |
| StockV3Adapter | 0x0e44C0863e0B5CA2903e6E2E78248f172913a9E2 (opens Blockscout in a new tab)Sourcify (exact match)33 stock routes; ownership renounced, so the route table is frozen |
| PonsV2CurveAdapter | 0xDbC9E63CD52045563c86792e71173692286b71bA (opens Blockscout in a new tab)Reused by the router for Pons markets |
Legacy deployment (legacy): the first mainnet deployment, against Pons V3 pools. It is kept for history (the first real mainnet clears happened here) and is read-only in the product. Deployed at block 34,664,366.
Retired v1 contracts
The first Pons V2 curve deployment is retired: a critical issue was found in our internal review (finding F-01 on Security). It never held user funds (no clusters, no mandates, no ETH). NoFomo no longer indexes it or builds transactions for it. Deployed at block 35,811,920. Do not send anything to these addresses.
| Contract | Address |
|---|---|
| BlockClearing (v1) | 0x4e372df38dabA638fcfb19B18c792E30a0C42d7A (opens Blockscout in a new tab)Retired |
| MandateVault (v1) | 0x8ec27184f76db7bE1Ec9b2A9781152d6417b6400 (opens Blockscout in a new tab)Retired |
Third-party contracts the adapters read from. They are not NoFomo's and are listed for verification only.
| Contract | Address |
|---|---|
| WETH | 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 (opens Blockscout in a new tab) |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 (opens Blockscout in a new tab)Quote asset of most stock pools (6 decimals) |
| USDG/WETH 0.01% pool | 0x52e65B17fB6E5BA00Ed806f37Afcd2DaA50271Ca (opens Blockscout in a new tab)The hop every USDG stock route uses |
| V3 pool factory | 0x1f7d7550B1b028f7571E69A784071F0205FD2EfA (opens Blockscout in a new tab)Factory of every stock pool the adapter routes to |
| Stock Token registry | 0xe10b6f6B275de231345c20D14Ab812db62151b00 (opens Blockscout in a new tab)Robinhood's beacon: upgrades, pause, account blocklist |
| Pons V2 factory | 0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e (opens Blockscout in a new tab)Records each launch; the router verifies curves against it |
| Pons V3 factory | 0xA5aAb3F0c6EeadF30Ef1D3Eb997108E976351feB (opens Blockscout in a new tab)Legacy venue |
How the pieces fit
Wallets and agents
join, leave, clear, claim
Allocators and originators
arm, top up, revoke, execute
BlockClearingV2
clusters: escrow, prorate, one guarded buy, claims
MandateVaultV2
armed ETH under limits and scope, one buy per execution
VenueRouter
no admin: dispatches by the market's own code or the Pons factory record
StockV3Adapter
exact V3 quotes, capacity, issuer pause checks
PonsV2CurveAdapter
reads reserves and fees live off each curve
Stock token pools
Robinhood Stock Token / WETH or USDG (via USDG/WETH)
Pons V2 launch curve
native ETH bonding curve
BlockClearingV2
Clusters. openBlock(market, window, ceilingBps) creates one (window 10 s to 1 h, ceiling 10 to 2,000 bps), fixes the payout token and records a reference quote (what 0.001 ETH buys right now, fees included); it can join in the same call. join(id) escrows ETH (minimum 0.000001 ETH) and keeps the best quote seen; leave(id) refunds it before close.
After close, clear(id) is a permissionless crank: it asks the venue for maxEthForImpact, computes the fill ratio, takes the 10 bps fee and makes one buy. The fill is measured by balance and must price within the ceiling plus a 3% guard of the best quote seen while the cluster was open. If it doesn't, or the venue can't quote, clear reverts and can be retried; from 15 minutes after close a clear that still can't fill settles as a full refund. A clear that runs out of gas always reverts, so nobody can void a cluster by under-supplying gas (a stock clear on a USDG route uses about 2.6M gas).
claim(id) pays a wallet its tokens and refund; anyone can push a wallet's claim with claimFor(id, wallet) (proceeds only ever go to that wallet). If the token transfer fails (a paused stock or a blocked wallet), the ETH refund is still paid and the tokens are parked in owedTokens for claimTokens(id). Views: getBlock, previewClear, entitlementOf, minTokensFor. Fees accrue and are sent to the fixed fee recipient by withdrawFees().
MandateVaultV2
Mandates. arm(params) creates a mandate from one struct: originator, per-execution and daily caps, ceiling, expiry, and two scope fields: market (the only market it may fund, or zero for any market the router accepts) and maxSpotWad (skip it when pre-trade spot is above this, or zero for no cap). topUp adds ETH, revoke returns the whole balance instantly. The originator calls execute(market, ceilingBps, ids, minTokensOut) with up to 64 mandate ids in strictly increasing order; the vault sizes each one within its limits and scope, makes one buy, and transfers tokens to every participant at the same price. Lookups: mandatesOf(allocator), mandatesFor(originator), getMandate(id).
VenueRouter
The one IVenue both contracts pin (buy, sell, quoteBuy, quoteSell, spotPrice, maxEthForImpact, underlying). It has no admin. A market is a stock if its code is the canonical Robinhood Stock Token proxy, a Pons market if the Pons factory records exactly that curve for its token, and anything else reverts unknown market. kindOf(market) returns 1 (stock), 2 (Pons) or 0. The router re-measures every fill by balance and forwards any ETH a venue hands back.
StockV3Adapter
Robinhood Stock Tokens on their Uniswap-V3-style pools. The market handle is the stock token itself and underlying is the identity, so nothing can change what a cluster pays out. Quotes replicate the pool's swap loop exactly (tick by tick), and maxEthForImpact never admits more than the ceiling, including on two-hop routes through USDG. listedCount() and listedTokens(i) enumerate the 33 routes; tradeBlocker(token) says why a stock can't trade right now (paused, corporate action pending when a multiplier change takes effect within 2 hours, or no route); sharesPerToken(token) is the ERC-8056 multiplier (shares = raw tokens x multiplier; everything onchain is in raw tokens). The owner has renounced ownership, so the route table can no longer change.
PonsV2CurveAdapter
Pons V2 bonding curves. Its market handle is the curve itself, not the token. It measures tokens received by balance difference and refuses graduated or non-ETH curves. In V2 it is only reachable through the router, which first checks the curve against the Pons factory.
Events
| Contract | Events |
|---|---|
| BlockClearingV2 | BlockOpened, Joined, Left, QuoteObserved, Cleared, Claimed, TokensDeferred, FeesWithdrawn |
| MandateVaultV2 | Armed, MandateScope, ToppedUp, Revoked, Executed, Filled, FeesWithdrawn |
| VenueRouter | Routed |
| StockV3Adapter | RouteSet, RouteRemoved, AdapterBought, AdapterSold |
Everything the API and the app show is derived from these events and direct contract reads. You can rebuild it from the chain alone.
What is trusted
- No admin keys, no pause switch, no upgrade proxy on the NoFomo contracts. Fee rate, guard and limits are constants.
- Escrow leaves the contracts only through a clearing (into the venue), a claim, a leave or a revoke.
- The venues themselves: stock pools and Pons curves are third-party code. The adapters and the router are written to distrust them where they can (balance measurement, the price guard).
- The stock token issuer: Robinhood Stock Tokens are upgradeable, and the issuer can pause them, block wallets and burn tokens. That is outside NoFomo's control; see the risk disclosure.
- The fee recipient address is fixed at deployment and only ever receives the 10 bps fee.