# musiclaunch.lol > MIT-licensed music-token launchpad on Base (8453). A launch deploys a music token and locks 100% of its supply as > Uniswap v4 liquidity, forever. Launch fee: free when quoted in BTSG, 0.0025 ETH for ETH/USDC quotes (forwarded to an immutable fee address). ## Source verification - Base (8453): Basescan https://basescan.org/address/0x20B50A33719fe1Df58363b99485fBDc860575433#code (factory), https://basescan.org/address/0x0B2C76923679aCD03E44c96651aF8b85795bCB65#code (locker); Blockscout https://base.blockscout.com/address/0x20B50A33719fe1Df58363b99485fBDc860575433?tab=contract (factory), https://base.blockscout.com/address/0x0B2C76923679aCD03E44c96651aF8b85795bCB65?tab=contract (locker); Sourcify https://repo.sourcify.dev/8453/0x20B50A33719fe1Df58363b99485fBDc860575433 (factory), https://repo.sourcify.dev/8453/0x0B2C76923679aCD03E44c96651aF8b85795bCB65 (locker) ## Launch flow 1. POST music metadata before the transaction. The API returns a stable metadata URI and predicted token address. 2. Call factory.launch from the creator wallet. It deploys a fixed-supply music ERC-20 (default 1,000,000,000; no mint/pause/blacklist/tax/owner). 3. The factory initializes a Uniswap v4 quote/token pool (quote = BTSG, ETH or USDC; tick spacing 200; no hook) at the chosen start tick. 4. It mints one single-sided position holding 100% of supply to an ownerless locker, then fixes fee routing. lpFee accepts 0, 10000 (1%) or 30000 (3%) pips. recipients [] burns all fees; otherwise provide {payout,bps}[] summing to 10000. These launch parameters are permanent. Anyone may call locker.collect(tokenId): it removes zero liquidity and pays accrued fees to recipients (or burns them). Failed payouts are credited for later claim. ## Contracts Base (8453): MusicLaunchFactory 0x20B50A33719fe1Df58363b99485fBDc860575433 · LaunchLocker 0x0B2C76923679aCD03E44c96651aF8b85795bCB65 · feeRecipient 0xb42705acCDB6ad6517849D05268E906D61E8c2Ec Uniswap v4: Base PoolManager 0x498581fF718922c3f8e6A244956aF099B2652b2b, Universal Router 0x6fF5693b99212Da76ad316178A184AB56D299b43 BTSG (Base, 6 dec): 0x0357d61eDe1cbCB38981B11117cFcA1854CA28Ad USDC (Base, 6 dec): 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 ## Launch (contract call) factory.launch{value: quote == BTSG ? 0 : 0.0025 ether}((name, symbol, metadataURI, quote, supply=0, startTick, lpFee, salt, recipients)) Only BTSG, native ETH (address(0)) and USDC are valid quotes. startTick must be a multiple of 200; 184200 ≈ 10 ETH FDV for 1B supply (raw price = 1.0001^tick token-wei per quote unit). ERC20 quote (BTSG/USDC): token must sort above the quote address → call factory.findSalt(launcher, baseSalt, name, symbol, 0, metadataURI, quote, 64) first. Music metadata: POST https://musiclaunch.lol/api/launch/meta {chain: "base", launcher, salt, name, symbol, artist, genre, audio_url (ar:// or https), duration_seconds?, description?, image_url?, website?, x_handle?} → {uri, token}; pass uri as metadataURI. ## API - GET https://musiclaunch.lol/api/launch/list?chain=base&sort=new|trending|mcap|volume|gainers&window=1h|24h|all&limit=50 - GET https://musiclaunch.lol/api/launch/feed - GET https://musiclaunch.lol/api/launch/meta/ - GET https://musiclaunch.lol/api/launch/candles?chain=base&token=0x…&interval=1m|5m|15m|1h|4h|1d - GET https://musiclaunch.lol/api/launch/holders?chain=base&token=0x… - GET https://musiclaunch.lol/api/launch/search?q=&chain=base - POST https://musiclaunch.lol/api/launch/sync?chain=base&tx=0x… (index a tx you just sent) - GET https://musiclaunch.lol/api/health Pages: / (list), /launch, /t/base/ (trade + fees + audio), /rules, /agents.