Docs
Technical reference for bots, scanners, and anyone integrating directly with the contracts — every value below is a real, checkable property of what's deployed, not a description of intent.
Chain
| Chain | Robinhood Chain (Arbitrum Orbit L2) |
| Chain ID | 4663 (mainnet) |
| HTTP RPC | https://rpc.mainnet.chain.robinhood.com |
| WebSocket RPC | wss://feed.mainnet.chain.robinhood.com |
| Alchemy RPC | https://robinhood-mainnet.g.alchemy.com/v2/<key> |
| Block explorer | robinhoodchain.blockscout.com |
| Native gas token | ETH |
LaunchFactory — discovering new launches
- Address (mainnet):
0xd51476efEa15378CdCf250B39d7bCA562297e482— verified source on Blockscout. - Every new launch fires exactly one
LaunchCreatedevent from this address. - Subscribe to that event to detect new launches in real time.
event LaunchCreated( address indexed token, address indexed curve, address indexed creator, string name, string symbol, uint256 tokenSupply, uint256 holderShareBps, uint256 burnShareBps, uint256 creatorBuyFeeBps, uint256 creatorSellFeeBps, address graduationQuoteAsset );
| token | The new ERC20's address — standard 18-decimal token, full supply pre-minted to the curve. |
| curve | The BondingCurve contract holding this launch's reserves — trade against this address pre-graduation. |
| creator | Who launched it. |
| name / symbol | Token metadata, exactly as submitted — not validated or normalized on-chain. |
| tokenSupply | Full fixed supply, 18 decimals (e.g. 1,000,000,000 tokens = 1000000000 × 10¹⁸). |
| holderShareBps | Share of the creator's own fee auto-paid to holders, in bps (10000 = 100%). |
| burnShareBps | Share of what's left of the creator's fee (after the holder cut) spent on auto buy-and-burn, in bps. |
| creatorBuyFeeBps / creatorSellFeeBps | Creator's fee on buys and sells respectively, in bps — independently set, not always equal. |
| graduationQuoteAsset | address(0) for a standard ETH-paired launch, or an owner-approved ERC20 the curve trades in directly instead. |
Token creation — every configurable parameter
createLaunch() takes exactly these eight arguments, in this order — everything a creator can configure on-chain:
function createLaunch( string name, string symbol, uint256 tokenSupply, uint256 holderShareBps, uint256 burnShareBps, uint256 creatorBuyFeeBps, uint256 creatorSellFeeBps, address graduationQuoteAsset ) external returns (address token, address curve);
- Name — free text, up to 64 characters in the UI (not enforced on-chain).
- Symbol — the UI strips a leading
$and uppercases it before sending; not enforced on-chain. - Total supply — the UI only offers 1M / 1B / 1T whole tokens, but any value at or above
LaunchFactory.MIN_TOKEN_SUPPLY()is valid on-chain. Bonding curve and graduation mechanics are identical regardless of supply chosen. - Graduation pairing —
address(0)for ETH, or one owner-approved ERC20. Whatever's chosen is what the curve trades in from the first buy; buyers can still pay in plain ETH regardless, auto-swapped at purchase. The ETH graduation threshold is a fixed factory constant (LaunchFactory.GRADUATION_THRESHOLD()); a non-ETH pairing's threshold is a separate, per-asset constant onGraduationExecutor.quoteAssetConfigs(asset). - Creator fee — 0–10%, enforced client-side (not on-chain) as a UI safety cap. One rate for both buy and sell by default, or an independent sell rate if the creator opts in. This is on top of a separate, fixed 1% protocol fee — both are netted out of a trade's output before pricing.
- Holder share — 0–100% of the creator's own fee, auto-distributed to real holders. No staking or claiming.
- Auto buy-and-burn — 0–100% of whatever's left of the creator's fee after the holder share, spent automatically buying back and burning the token instead of paid to the creator.
Three things creators can set are not part of createLaunch() at all:
- Logo, description, X/Telegram/website links — pure off-chain metadata, attached after the launch transaction via one free wallet signature (no gas). A launch is fully valid on-chain with none of this set.
- Initial buy — an entirely separate, optional
buy()call a creator can place immediately after their own launch transaction. Not encoded in the launch parameters, and can just as easily be any other wallet's transaction.
BondingCurve — pre-graduation trading
Before graduation, every launch trades only against its own BondingCurve contract (the curve address from LaunchCreated) — never a Uniswap pool.
function buy(address recipient, uint256 minTokensOut) external payable returns (uint256 tokenAmountOut); function sell(uint256 tokenAmountIn, uint256 minQuoteOut) external returns (uint256 quoteAmountOut);
buytakes ETH viamsg.valueon an ETH-paired curve; a separatebuyWithQuote()exists for non-ETH pairings.minTokensOutis standard slippage protection.sellrequires the caller to have approved the curve fortokenAmountInfirst — standard ERC20approve, same as any AMM.- Combined protocol + creator fee is taken out of every trade before pricing, already netted out of the
tokenAmountOut/quoteAmountOuta bot would quote. - A buy large enough to cross the graduation threshold in one transaction is not capped, refunded, or split — it's priced along the curve in full, and graduation fires automatically at the end of that same transaction, after the buyer's tokens are already transferred.
event Buy(address indexed buyer, address indexed recipient, uint256 quoteAmountIn, uint256 tokenAmountOut, uint256 feeAmount); event Sell(address indexed seller, address indexed recipient, uint256 tokenAmountIn, uint256 quoteAmountOut, uint256 feeAmount); event Graduated(uint256 realQuoteReserve, uint256 tokenReserve); event GraduationExecuted(uint256 seedAmount, uint256 burnAmount);
Graduated fires the instant a curve crosses its threshold — trading on it stops permanently at that point. Treat this as the signal to stop routing to the curve; wait for GraduationExecuted to confirm liquidity has actually landed before routing to the graduated pool.
Graduation — post-graduation trading
GraduationExecutorseeds a real, permanently-locked liquidity position on Uniswap V4 using most of the unsold token supply, and burns the remainder — roughly a quarter of what's left unsold at graduation, not the whole unsold balance.- Uniswap V4 uses one shared
PoolManagercontract for every pool on the chain — no separate per-pool address like V2/V3. A pool is identified by aPoolKey(currencies, fee tier, tick spacing, hook address) and its derivedPoolId.
To route a trade on a graduated token:
- Know the token's quote-asset pairing (ETH by default, or the approved ERC20 from
graduationQuoteAsset). - Reconstruct the
PoolKeyused at graduation — fixed tick spacing and fee tier across every teg.fun launch, plus the sharedLaunchpadFeeHookaddress. Confirm current values againstGraduationExecutordirectly, since these are protocol-wide constants, not per-launch. - Call
PoolManager.swap(), or route through a V4-aware aggregator / Universal Router integration — not a V2/V3-style router.
Questions this page doesn't answer, or want something added? Reach out and we'll get it covered. See also How TEG.fun works for the plain-language version of all this.