# Action.jetzt > Open-source (MIT: https://github.com/Gitlawb/openlaunch), zero-fee token launchpad on Base (8453) and Robinhood Chain (4663). One transaction deploys a token and locks 100% of its supply as > Uniswap v4 liquidity, forever. No platform fee: the factory and locker have no fee address at all. ## Source verification - Base (8453): Basescan https://basescan.org/address/0xEBB1d079346E4BbE55c4b19B7aa7020E6Ff3d586#code (factory), https://basescan.org/address/0x2B2895449d12A92Be6Ba694A9C97243eD5BfB81b#code (locker); Blockscout https://base.blockscout.com/address/0xEBB1d079346E4BbE55c4b19B7aa7020E6Ff3d586?tab=contract (factory), https://base.blockscout.com/address/0x2B2895449d12A92Be6Ba694A9C97243eD5BfB81b?tab=contract (locker); Sourcify https://repo.sourcify.dev/8453/0xEBB1d079346E4BbE55c4b19B7aa7020E6Ff3d586 (factory), https://repo.sourcify.dev/8453/0x2B2895449d12A92Be6Ba694A9C97243eD5BfB81b (locker) - Robinhood Chain (4663): Blockscout https://robinhoodchain.blockscout.com/address/0x152c77bdA08708F75C62feb64E0a747D9891A6ee?tab=contract (factory), https://robinhoodchain.blockscout.com/address/0xE210BdC33e51D1FBB1271f3e6870036Bb8eef840?tab=contract (locker); Sourcify https://repo.sourcify.dev/4663/0x152c77bdA08708F75C62feb64E0a747D9891A6ee (factory), https://repo.sourcify.dev/4663/0xE210BdC33e51D1FBB1271f3e6870036Bb8eef840 (locker) ## What a launch does 1. deploys a fixed-supply ERC-20 (1,000,000,000; no mint/pause/blacklist/tax/owner) 2. initializes a Uniswap v4 pool quote/token (quote = ETH, GITLAWB, USDG on Robinhood Chain, or a registry stock token; tick spacing 200, no hook) at the chosen start tick 3. mints one single-sided position holding 100% of supply to an ownerless locker (no withdraw path exists) 4. registers fee routing: lpFee 0 | 10000 (1%) | 30000 (3%) pips; recipients [] = fees burned, else {payout,bps}[] summing to 10000. Fixed forever. Anyone may call locker.collect(tokenId): accrued fees are paid straight to recipients (or burned). ## Contracts Base (8453): LaunchFactory 0xEBB1d079346E4BbE55c4b19B7aa7020E6Ff3d586 · LaunchLocker 0x2B2895449d12A92Be6Ba694A9C97243eD5BfB81b Robinhood Chain (4663): LaunchFactory 0x152c77bdA08708F75C62feb64E0a747D9891A6ee · LaunchLocker 0xE210BdC33e51D1FBB1271f3e6870036Bb8eef840 Uniswap v4: Base PoolManager 0x498581fF718922c3f8e6A244956aF099B2652b2b, Universal Router 0x6fF5693b99212Da76ad316178A184AB56D299b43; Robinhood PoolManager 0x8366a39CC670B4001A1121B8F6A443A643e40951, Universal Router 0x8876789976decbfcbbbe364623c63652db8c0904 USDG (Robinhood, 6 dec): 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 GITLAWB (Base, 18 dec): 0x5F980Dcfc4c0fa3911554cf5ab288ed0eb13DBa3 (Gitlawb's token; fees paid in GITLAWB, burned when recipients = []) GITLAWB (Robinhood, 18 dec): 0xd1b0d44E4f6ed940fcC7A9F59Bf30Daf62cCFe3D (LayerZero OFT of the Base token, 1:1) ## Launch (contract call) factory.launch((name, symbol, metadataURI, quote, supply=0, startTick, lpFee, salt, recipients)) startTick 184200 ≈ 10 ETH FDV for 1B supply (raw price = 1.0001^tick token-wei per quote unit; for USDG use ~391400 ≈ $10k FDV). ERC20 quote: token must sort above the quote address → call factory.findSalt(launcher, baseSalt, name, symbol, 0, metadataURI, quote, 64) first. Optional metadata: POST https://action.jetzt/api/launch/meta {chain, launcher, salt, name, symbol, description?, image_url?, website?, x_handle?} → {uri, token}; pass uri as metadataURI. Recommended: buy a little right after launch (a Universal Router swap on the new pool; the site's form suggests ≈ $25). A token with no holder and no price move reads as dead on screeners and sits under "quiet launches" on the home page until an outside wallet trades it. ## API - GET https://action.jetzt/api/launch/list?chain=base|robinhood&sort=live|new|mcap|volume|gainers|holders&window=1h|24h|all&limit=50 sort=live (the home page default; "trending" is an alias): tokens an outside wallet traded in the last 24h first, ranked by outside wallets this hour, then today, then the last outside trade; then each launcher's newest launch under 1h old; then quiet launches, one row per launcher; both by age. "Outside" = not the launcher and not a swap in the sniper window (launch block + 3; a sell there can only be a sniper's). Rows carry traders_1h_ex / traders_24h_ex (those counts), last_outside_trade_at, live_tier (live|new|quiet, live sort only) and launcher_collapsed. - GET https://action.jetzt/api/launch/feed - GET https://action.jetzt/api/launch/meta/ - POST https://action.jetzt/api/launch/sync?chain=base|robinhood&tx=0x… (index a tx you just sent) - GET https://action.jetzt/api/health Pages: / (list, ?chain=), /launch (?chain=), /t// (trade + fees), /rules, /agents.