Network and contracts
Chain settings, contract addresses, pairs and protocol constants.
Network
- Network
- Robinhood Chain
- Chain ID
- 4663
- Native asset
- ETH
- Public RPC
- https://robinhood-mainnet.g.alchemy.com/v2/alch_jWNbqre0R7t7OvbAAE3-G
- Explorer
- https://robinhoodchain.blockscout.com
- First block
- 93,140,866
Contract addresses
This website only reads these contracts and sends your transactions to them. They work the same without it. Every token also has its own contract, created by the Launcher.
Launcher
Creates tokens with an open pair, checks every rule with the Rulebook, opens each token's bonding curve and creates its pool.
0xFc7931816e1b9ddc87B6C284765B5AFD593F0404Explorer for Launcher (opens in a new tab)Fee Hook
The Uniswap v4 hook on every CAST pool. Runs each token's bonding curve, charges the sealed fees in the paired asset, and adds the pool's only liquidity when the token graduates. It refuses every other liquidity change.
0x7F6AdEeF151b0079e10EDf9C96647Bd84567aAccExplorer for Fee Hook (opens in a new tab)Router
Buys and sells in the paired asset. Tells the Fee Hook who is trading, so Hold Streak discounts apply. It only trades CAST tokens, and while a token's max wallet applies it is the only router that can buy it.
0xbDDC1Bc49902C4afe3396ED0e2A11Cf8747275E4Explorer for Router (opens in a new tab)Quoter
Read-only fee quotes from the same fee maths the hook charges with. This site's numbers come from here.
0xAD9CFf7FdcD136C92365C8409A41760a9736Dec9Explorer for Quoter (opens in a new tab)Rulebook
The safety limits and the grading formula. Validates every launch and grades any token.
0xC1e9104F6015679c17f2E27C28D3B7910eFf181AExplorer for Rulebook (opens in a new tab)Pairs
The approved list of assets a token can be paired with, and the bonding curve for each. Only the Fee Recipient's controller can change it, and only for new launches.
0x5a1Ad5EFD9bbd34Bc9a73c595Ec42D1B196Af9fCExplorer for Pairs (opens in a new tab)Fee Recipient
Sets where CAST's 20% share is paid. Its controller, meant to be a CAST multisig (a Safe), can change that address and manage the pair list, nothing else.
0x1352B6EA4a6eDf1E08c2d478CD67dE5E2897c718Explorer for Fee Recipient (opens in a new tab)Pool Manager
The Uniswap v4 PoolManager that holds every CAST pool, and the tokens and paired asset each bonding curve holds, as the Fee Hook's claims.
0x8366a39CC670B4001A1121B8F6A443A643e40951Explorer for Pool Manager (opens in a new tab)Pairs
A token can be paired with any asset on the approved list kept by the Pairs contract (CastPairs). ETH, as address(0), is listed from the start. Each pair also sets the bonding curve new tokens start on: a virtual reserve, which sets the opening price, and a graduation target, which is how much of the asset the curve raises before the token graduates into its pool. Every target is about $10,000 of its asset, and every virtual reserve is 30/85 of its target, so tokens open and graduate at about the same dollar value whatever they're paired with.
The table shows each curve for a token with no creator allocation. About 79.3% of the tokens are sold on the curve, and the other 20.7% go into the pool at graduation. 1 billion tokens open at about a third of the target (about $3,300) and graduate at about 4.83 times the target (about $48,000).
| Pair | Decimals | Graduation target | Opens at (1B tokens) | Graduates at (1B tokens) | Address |
|---|---|---|---|---|---|
| ETHEther | 18 | 4.2 ETH | 1.381 ETH | 20.3 ETH | address(0), native ETH |
| USDGGlobal Dollar | 6 | 10,000 USDG | 3,289 USDG | 48,333 USDG | 0x5fc5…d168 |
| AAPLApple | 18 | 28.9 AAPL | 9.506 AAPL | 139.7 AAPL | 0xaF3D…93f9 |
| NVDANVIDIA | 18 | 46.2 NVDA | 15.2 NVDA | 223.3 NVDA | 0xd060…9EEC |
| TSLATesla | 18 | 28.4 TSLA | 9.341 TSLA | 137.3 TSLA | 0x322F…3b2d |
| SPYSPDR S&P 500 ETF Trust | 18 | 13.1 SPY | 4.309 SPY | 63.32 SPY | 0x117c…4C0C |
On the curve, the price of one whole token in whole units of the pair is (virtualPair + raised) / (virtualToken - sold) * 10 ** (18 - decimals), read from the Fee Hook's curves(token). After graduation it comes from the pool: 10 ** (18 - decimals) / s ** 2, where s = sqrtPriceX96 / 2 ** 96. Paired asset and price has code.
| Function | What it does |
|---|---|
| listPair(asset, virtualReserve, graduationTarget) | Lists an asset, or reopens a closed one, and sets the curve new launches use. Only the Fee Recipient's controller. Reverts with BadCurve(virtualPair, target, market) if the curve wouldn't work for every launch. |
| closePair(asset) | Stops new launches with the asset. Tokens already paired with it keep trading. Only the Fee Recipient's controller. |
| isOpen(asset) | Whether new launches can pair with the asset. |
| curveFor(asset) | Returns (virtualReserve, graduationTarget) for a new launch. Reverts with PairNotOpen(asset) if the asset isn't open. |
| assets() | Every asset ever listed, open or closed, in the order they were first listed. |
| pairs(asset) | Returns (listed, open, virtualReserve, graduationTarget). |
Bonding curve
The Fee Hook runs every token's bonding curve inside the token's own pool, and graduates it into that pool when the curve has raised its target. These are the parts of the hook that deal with the curve. Graduation explains what happens step by step.
| Name | What it is |
|---|---|
| curves(token) | Returns (virtualPair, virtualToken, raised, sold, target, curveTokens, poolTokens, graduated). Progress to graduation is raised / target. |
| openCurve(token, virtualPair, target, market) | Opens a new token's curve and returns the price its pool starts at. Only the Launcher, once per token. |
| CurveOpened | Event: a token's curve opened, with its reserves, target, curveTokens, poolTokens and the pool's starting sqrtPriceX96. |
| CurveTrade | Event: one trade on the curve, with the amounts, fees and the curve's raised and sold totals after it. |
| Graduated | Event: the token moved into its pool, with what went into the position, its liquidity and price. |
| CurveIsExactInputOnly() | The curve only takes exact-input trades. |
| SellExceedsCurve(tokens, sold) | The curve only buys back up to what it has sold. |
| OnlyGraduationAddsLiquidity() | Nobody can add liquidity to a CAST pool. The hook adds the only position itself, at graduation. |
| LiquidityLockedForever() | Nobody can remove liquidity from a CAST pool. |
| CurveAlreadyOpen(), CurveNotOpen() | A curve can only be opened once, and a pool can only be created for a token whose curve is open. |
Topics for each event are on Events and indexing.
Constants
The same for every token, fixed in the contracts:
| Constant | Value | Meaning |
|---|---|---|
| Total supply | 1_000_000_000e18 | 1 billion tokens, 18 decimals. Never more. |
| CAST share | 2000 bps | 20% of every sealed fee |
| Pool fee | 3000 | 0.3% Uniswap LP fee, from graduation on, left in the pool. Not charged on the curve |
| Tick spacing | 60 | Uniswap v4 pool tick spacing |
| currency0 | pairAsset() | Always the paired asset (native ETH is address(0)), so a buy is always zeroForOne |
| Graduation target | Per pair | What the curve raises before the token graduates. Set in the Pairs contract. See Pairs above |
| Virtual reserve | Per pair | 30/85 of the graduation target. Sets the curve's opening price |
| Reward stream | 86400 s | Holder rewards pay out over 24 hours |
| Breakpoints | 8 | Most points one schedule can have |
| No cap | 10000 bps | A max wallet at or above this means no cap |
Source code
The contracts are written in Solidity 0.8.26 on Uniswap v4. Verified source will be published on the explorer with the mainnet deployment. Until then, the behaviour these docs describe can be checked by reading the contracts directly, as in Reading token state.