TEG.fun mascotTEG.fun
Create

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

ChainRobinhood Chain (Arbitrum Orbit L2)
Chain ID4663 (mainnet)
HTTP RPChttps://rpc.mainnet.chain.robinhood.com
WebSocket RPCwss://feed.mainnet.chain.robinhood.com
Alchemy RPChttps://robinhood-mainnet.g.alchemy.com/v2/<key>
Block explorerrobinhoodchain.blockscout.com
Native gas tokenETH

LaunchFactory — discovering new launches

  • Address (mainnet): 0xd51476efEa15378CdCf250B39d7bCA562297e482 — verified source on Blockscout.
  • Every new launch fires exactly one LaunchCreated event 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
);
tokenThe new ERC20's address — standard 18-decimal token, full supply pre-minted to the curve.
curveThe BondingCurve contract holding this launch's reserves — trade against this address pre-graduation.
creatorWho launched it.
name / symbolToken metadata, exactly as submitted — not validated or normalized on-chain.
tokenSupplyFull fixed supply, 18 decimals (e.g. 1,000,000,000 tokens = 1000000000 × 10¹⁸).
holderShareBpsShare of the creator's own fee auto-paid to holders, in bps (10000 = 100%).
burnShareBpsShare of what's left of the creator's fee (after the holder cut) spent on auto buy-and-burn, in bps.
creatorBuyFeeBps / creatorSellFeeBpsCreator's fee on buys and sells respectively, in bps — independently set, not always equal.
graduationQuoteAssetaddress(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 pairingaddress(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 on GraduationExecutor.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);
  • buy takes ETH via msg.value on an ETH-paired curve; a separate buyWithQuote() exists for non-ETH pairings. minTokensOut is standard slippage protection.
  • sell requires the caller to have approved the curve for tokenAmountIn first — standard ERC20 approve, same as any AMM.
  • Combined protocol + creator fee is taken out of every trade before pricing, already netted out of the tokenAmountOut / quoteAmountOut a 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

  • GraduationExecutor seeds 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 PoolManager contract for every pool on the chain — no separate per-pool address like V2/V3. A pool is identified by a PoolKey (currencies, fee tier, tick spacing, hook address) and its derived PoolId.

To route a trade on a graduated token:

  1. Know the token's quote-asset pairing (ETH by default, or the approved ERC20 from graduationQuoteAsset).
  2. Reconstruct the PoolKey used at graduation — fixed tick spacing and fee tier across every teg.fun launch, plus the shared LaunchpadFeeHook address. Confirm current values against GraduationExecutor directly, since these are protocol-wide constants, not per-launch.
  3. 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.