{"version":"1.0.0","generatedAt":"2026-10-27T19:36:14.364Z","site":"https://nasdegen.fun","docs":{"page":"https://nasdegen.fun/integrate","agents":"https://nasdegen.fun/agents","llms":"https://nasdegen.fun/llms.txt","openapi":"https://nasdegen.fun/api/openapi.json","rules":"https://nasdegen.fun/rules"},"chains":{"base":{"key":"base","chainId":8453,"name":"Base","status":"live","explorer":"https://basescan.org","rpc":"https://mainnet.base.org","contracts":{"factory":{"name":"LaunchFactory","address":"0xFf66c00C1eE1079B425fEF4e5E6682ae6beb188E","role":"deploys the token, opens the pool, locks the position; emits Launched"},"locker":{"name":"LaunchLocker","address":"0x52b459199c054A5503F72811Ee7C368956927c1F","role":"holds every launch position forever; collect() pays the fee split; emits Collected / Paid / Burned"},"feeRouter":{"name":"FeeRouter","address":"0xd06e0accc1EA626E98b8A8ad4D44ec405C2f1DB6","role":"the protocol's fee sink and the first recipient of every launch; forward() splits its balance 50 / 50; emits Split"},"xVaultFactory":{"name":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","role":"superseded by SocialVaultFactory; X-only fee vaults"},"socialVaultFactory":{"name":"SocialVaultFactory","address":"0xcc976c58705673bd349E0d1A9f0812575c29bdA1","role":"deterministic fee vaults for a handle on a registered platform (1 = X, 2 = TikTok, 3 = Instagram, 4 = GitHub); emits VaultDeployed / Claimed / HandleBound"},"posterPoolFactory":{"name":"PosterPoolFactory","address":"0x35F94178A55dC9512f23fA52dfFbe557b4FA7F72","role":"pay-the-posters payrolls: one PosterPool per launch (poolOf(params), CREATE2), rounds the site's attester signs and anyone relays (payRound); the pool caps cadence, per-winner share and holder status; emits PoolDeployed / RoundPaid"},"curveFactory":{"name":"CurveFactory","address":"0xD8c5d2860abFE05705E412e7debb3d1Fd2d46dDB","role":"bonding-curve launches and their graduation into a v4 pool; emits CurveLaunched / Graduated / Abandoned"},"curveHook":{"name":"CurveHook","address":"0xeA1A065e89611999bADfcBa24305d71Ac2fBa844","role":"the hook on every graduated curve pool: fee split, snipe tax; emits PoolFeesCollected"},"listingFactory":{"name":"ListingFactory","address":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","role":"lists an existing ERC-20 into a locked pool (bring a coin); emits Listed"},"listingLocker":{"name":"LaunchLocker (listings)","address":"0xE722c1Ff8fE0a73A843c34181E4C53D49Db3179d","role":"the ListingFactory's own locker: the same events as the launch locker"},"liquidityGate":{"name":"LiquidityGate","address":"0x5A56d12AdBD415021826B884ccFdF5a54cbD2800","role":"the hook on every direct and listing pool: only the factories may add liquidity; never touches a swap"},"treasury":{"name":"Treasury","address":"0x65308a5440D9e05289b5DAD6A865d52a7DF74F6b","role":"the cold wallet: every launch fee and half of every forward()"},"vesting":{"name":"Vesting","address":null,"role":"the platform token's (NASDEGEN) team vesting contract"},"launchAndBuy":{"name":"LaunchAndBuy","address":"0x7418B19a20E693377703325fe15b25599724E2D5","role":"atomic launch + first buy for direct launches; the factory records it as launcher, the creator is LaunchedVia.creator / creatorOf(token); emits LaunchedVia"},"multiLaunchRouter":{"name":"MultiLaunchRouter","address":"0xb5290De2a45F7136193f29456710A07051700D7A","role":"one signature, several chains: launches the home coin (like LaunchAndBuy) and sends a LayerZero V2 order per other chain; on each destination it launches that chain's SEPARATE coin for the same creator, with the same name, ticker and metadata. The factory records it as launcher; the creator is LaunchedVia.creator / creatorOf(token). Emits LaunchedVia, RemoteSent, RemoteLaunched, RemoteFailed. Null = not deployed here"},"twinBridge":{"name":"TwinBridge","address":null,"role":"a twin coin's LayerZero endpoint: it burns on the chain the coin leaves and mints on the chain it arrives, so ONE supply is shared across every chain that coin reaches, at one address. Null = the twin engine is not deployed here and every coin launched on this chain has its own separate supply"},"rulesFactoryV3":{"name":"RulesLaunchFactoryV3","address":"0xb936057CE0e50891655e559A196F007E6ac72B00","role":"launches a RulesTokenV3 (hooks enforced by the coin on every transfer, optional custom hook program) into a RulesGate pool, optionally with a FeeVault whose game modes the coin feeds; emits Launched (LaunchFactory's shape), RulesLaunched, FeeVaultCreated. Null = not deployed here"},"customRulesEngine":{"name":"CustomRulesEngine","address":"0xDf3C3A7eEe6d3FAE0646B2AFA54B15B9e4c7d520","role":"the stateless interpreter every RulesTokenV3 runs its custom hook program on (validate / runSection are pure views). Null = not deployed here"},"rulesGovernor":{"name":"RulesGovernor","address":"0x455D4AbD35FD03765D110B9Ce8AF952727a71A99","role":"holder governance of a RulesTokenV3's governable knobs: deposit, propose, 3-day vote (3% quorum), 2-day timelock, execute. Null = not deployed here"},"feeStyleFactory":{"name":"FeeStyleLaunchFactory","address":"0x99f05241BD59848080A54f3C9195AE186CA38e51","role":"plain launches into a dynamic-fee pool (fee 0x800000, tick spacing 200) whose FeeStyleHook sets every swap's LP fee (sniper decay, volatility, size); emits Launched (lpFee = 0x800000), FeeStyleLaunched. Null = not deployed here"},"feeStyleHook":{"name":"FeeStyleHook","address":"0x65F562786542c2cd26Cfa0f7925Da472d6aF6880","role":"the hook on every fee-style pool: LiquidityGate plus a per-swap LP fee; quoteFee(key, params) gives the fee a swap pays now; emits StyleRegistered. Null = not deployed here"},"creatorFeeFactory":{"name":"CreatorFeeLaunchFactory","address":"0xCA39a6851AeCaA3221C8eEBF0EAD868AABb7383E","role":"FeeStyleLaunchFactory's launch (same pool key on the FeeStyleHook, same Launched + FeeStyleLaunched events) with two creator-fee options fixed at launch: quoteOnly (creators paid only in the quote; the coin side of every fee is burned) and transferable (the current fee recipient can hand off future fees); emits CreatorFeeOptions(token, tokenId, quoteOnly, transferable). Null = not deployed here"},"creatorFeeLocker":{"name":"CreatorFeeLocker","address":"0xBfF2A9f82F8Cb8E3D202B20b71Dd17c8fF1c6760","role":"the CreatorFeeLaunchFactory's locker: LaunchLocker's collect / claim and events, plus quoteOnlyOf / transferableOf, TokenLegBurned, and the two-step fee hand-off (proposeHandoff, acceptHandoff, cancelHandoff; HandoffProposed / HandedOff) that only a current creator recipient can start; recipientsOf(tokenId) is the live split. Null = not deployed here"},"pegFactory":{"name":"PegLaunchFactory","address":null,"role":"uPEG launches: a PegToken (every whole unit of the coin is a numbered object on its ERC-721 PegMirror) locked 100% in a LiquidityGate pool; emits Launched (LaunchFactory's shape) and PegLaunched(token, mirror, objects, unit, baseURI). Null = not deployed here"}},"v4":{"poolManager":"0x498581fF718922c3f8e6A244956aF099B2652b2b","positionManager":"0x7C5f5A4bBd8fD63184577525326123B519429bDc","stateView":"0xA3c0c9b65baD0b08107Aa264b0f3dB444b867A71","quoter":"0x0d5e0F971ED27FBfF6c2837bf31316121532048D","universalRouter":"0x6fF5693b99212Da76ad316178A184AB56D299b43","permit2":"0x000000000022D473030F116dDEE9F6B43aC78BA3"},"swapLayout":"v1","quotes":[{"key":"eth","address":"0x0000000000000000000000000000000000000000","symbol":"ETH","decimals":18}],"events":[{"name":"Launched","contract":"LaunchFactory","address":"0xFf66c00C1eE1079B425fEF4e5E6682ae6beb188E","emitter":null,"signature":"Launched(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Launched(address indexed token, uint256 indexed tokenId, address indexed launcher, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 supply, string metadataURI)","topic0":"0xda18b133e41a7fe4e3adc625c6eeaf9237558c875e411398a623cc9603aad0a9","indexes":"bb_launches (kind pool; one row per token, its first pool is the primary market) + bb_launch_pools (one row per pool)","note":"a multi-pair launch emits one Launched per pool with the same token"},{"name":"MultiPairLaunched","contract":"LaunchFactory","address":"0xFf66c00C1eE1079B425fEF4e5E6682ae6beb188E","emitter":null,"signature":"MultiPairLaunched(address,bytes32[])","solidity":"event MultiPairLaunched(address indexed token, bytes32[] poolIds)","topic0":"0xa61112d06e0155d1f17b7bcef94fc48ca0406c6bc3152aca945cc8e835555479","indexes":"bb_launch_pools.pool_index (the pool set; factory.poolsOf(token) lists them with supply_bps)"},{"name":"RewardPoolCreated","contract":"LaunchFactory","address":"0xFf66c00C1eE1079B425fEF4e5E6682ae6beb188E","emitter":null,"signature":"RewardPoolCreated(address,address,address)","solidity":"event RewardPoolCreated(address indexed token, address indexed pool, address indexed quote)","topic0":"0xcccf10613f67792eecfb9a80ab0ceb4928e43c66255e7a39e9dd5a2dad5bc103","indexes":"bb_launches.reward_pool (the holders fee mode: the creator share is paid to holders in the quote)"},{"name":"FeeVaultCreated","contract":"LaunchFactory","address":"0xFf66c00C1eE1079B425fEF4e5E6682ae6beb188E","emitter":null,"signature":"FeeVaultCreated(address,address,address,uint8)","solidity":"event FeeVaultCreated(address indexed token, address indexed vault, address indexed quote, uint8 mode)","topic0":"0x255add866ba2eeef650e4e30a49e793bf95621d59796d33c2f5cfca46bc7300a","indexes":"bb_launches.fee_vault / fee_mode (creator fee modules; every FeeVault event lands in bb_vault_events)"},{"name":"LaunchedVia","contract":"LaunchAndBuy","address":"0x7418B19a20E693377703325fe15b25599724E2D5","emitter":null,"signature":"LaunchedVia(address,address,uint256,uint256,uint256)","solidity":"event LaunchedVia(address indexed creator, address indexed token, uint256 tokenId, uint256 quoteIn, uint256 tokensOut)","topic0":"0x5bf63f84755bf9de4570848428b2e7a8fff53eb980b51ae4c555467365a14630","indexes":"bb_launches.creator: the wallet that launched through the router (the same tx's Launched names the router as launcher)","note":"treat Launched.launcher == LaunchAndBuy as creator = LaunchedVia.creator (router.creatorOf(token) on-chain) for display, edit rights and holder exclusions; quoteIn / tokensOut = the first buy"},{"name":"LaunchedVia","contract":"MultiLaunchRouter","address":"0xb5290De2a45F7136193f29456710A07051700D7A","emitter":null,"signature":"LaunchedVia(address,address,uint256,uint256,uint256)","solidity":"event LaunchedVia(address indexed creator, address indexed token, uint256 tokenId, uint256 quoteIn, uint256 tokensOut)","topic0":"0x5bf63f84755bf9de4570848428b2e7a8fff53eb980b51ae4c555467365a14630","indexes":"bb_launches.creator: the wallet that launched through the router, on the home chain AND on every remote chain (a remote launch lands in the LayerZero executor's transaction)","note":"same signature and hook as LaunchAndBuy.LaunchedVia"},{"name":"RemoteSent","contract":"MultiLaunchRouter","address":"0xb5290De2a45F7136193f29456710A07051700D7A","emitter":null,"signature":"RemoteSent(bytes32,uint32,address,address,uint256,uint256)","solidity":"event RemoteSent(bytes32 indexed guid, uint32 indexed dstEid, address indexed creator, address homeToken, uint256 lzFee, uint256 dstValue)","topic0":"0x76b0046ac2032fe0cd04a9038e0d21cffc7a4f5d7c922311087c4a293f377ca2","indexes":"not indexed: the home side of a multi-chain launch (guid, dstEid, creator, homeToken, LayerZero fee, destination value)"},{"name":"RemoteLaunched","contract":"MultiLaunchRouter","address":"0xb5290De2a45F7136193f29456710A07051700D7A","emitter":null,"signature":"RemoteLaunched(bytes32,uint32,address,address,address)","solidity":"event RemoteLaunched(bytes32 indexed guid, uint32 indexed srcEid, address indexed creator, address homeToken, address token)","topic0":"0x9224beb90f1ddab99a57022f03146f14d3841f624324c9b68153aed607ef8db0","indexes":"not indexed: the remote side (guid, srcEid, creator, homeToken, token); the family query links the coins by creator + ticker + name"},{"name":"RemoteFailed","contract":"MultiLaunchRouter","address":"0xb5290De2a45F7136193f29456710A07051700D7A","emitter":null,"signature":"RemoteFailed(bytes32,address,uint256,bytes,bytes)","solidity":"event RemoteFailed(bytes32 indexed guid, address indexed creator, uint256 value, bytes order, bytes reason)","topic0":"0x1e357a98aa3d95a113341baacebd2faf9e4a89416eee24fb5b6d30fa56e54eef","indexes":"not indexed: a remote launch that reverted; its value is held for the creator (retry / cancel on that chain)"},{"name":"Listed","contract":"ListingFactory","address":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","emitter":null,"signature":"Listed(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Listed(address indexed token, uint256 indexed tokenId, address indexed lister, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 amount, string metadataURI)","topic0":"0xad5a4aaa469875ff13658232c22a8ba97398205fa40bdf452cdbd83b1ee2d117","indexes":"bb_listings + bb_launches (kind listing, supply = the token's totalSupply) + bb_launch_pools"},{"name":"CurveLaunched","contract":"CurveFactory","address":"0xD8c5d2860abFE05705E412e7debb3d1Fd2d46dDB","emitter":null,"signature":"CurveLaunched(address,address,address,address,address,uint256,uint256,uint256,uint16,uint16,string)","solidity":"event CurveLaunched(address indexed token, address indexed curve, address indexed launcher, address quote, address creatorFeeRecipient, uint256 supply, uint256 phantomQuote, uint256 graduationThreshold, uint16 feeBps, uint16 creatorTaxBps, string metadataURI)","topic0":"0x41a83fcb07d214b946bf3ed8ff5921bef5a4459be08287b8fe86e3de08103c08","indexes":"bb_launches (kind curve, pool_id = the curve address, graduation_threshold, phantom_quote, creator_tax_bps) + bb_curve_launches (phase 1)"},{"name":"CurveLaunchOptions","contract":"CurveFactory","address":"0xD8c5d2860abFE05705E412e7debb3d1Fd2d46dDB","emitter":null,"signature":"CurveLaunchOptions(address,uint32,uint16,uint16,uint256)","solidity":"event CurveLaunchOptions(address indexed token, uint32 snipeWindow, uint16 snipeStartBps, uint16 airdropBps, uint256 airdropTokens)","topic0":"0x718dd73f4177b643a4c4da4072fb4f3b3ca5d40c5714252c6b1a547aea4b8ecd","indexes":"bb_curve_launches.snipe_window / snipe_start_bps / airdrop_bps (API: snipe_window, snipe_start_bps, airdrop_bps on the row)","note":"right after CurveLaunched; snipeWindow 5 / snipeStartBps 9900 = the legacy same-block shield, else a 600 / 1200 / 1800 s linear window from 5000 / 7500 / 9000 bps; airdropTokens = supply x airdropBps / 10000 is held off the curve and never sold"},{"name":"CurveBuy","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveBuy(address,address,uint256,uint256,uint256,uint256)","solidity":"event CurveBuy(address indexed buyer, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 fee, uint256 tax)","topic0":"0xec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc455","indexes":"bb_launch_swaps (pool_id = the curve, is_buy true, amount0 = -quoteIn, amount1 = tokensOut) + bb_launches.curve_raised += quoteIn - fee - tax"},{"name":"CurveSell","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveSell(address,address,uint256,uint256,uint256,uint256)","solidity":"event CurveSell(address indexed seller, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 fee, uint256 tax)","topic0":"0x8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df","indexes":"bb_launch_swaps (is_buy false) + bb_launches.curve_raised -= quoteOut"},{"name":"CurveCompleted","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveCompleted(address,uint256,uint256)","solidity":"event CurveCompleted(address indexed recipient, uint256 quoteOut, uint256 tokenOut)","topic0":"0xf8d37a90738ae063b8b8058b66f5880cf3cf7ab0c5d4fa78219696591dfbfb67","indexes":"not stored: the clearing trade; Graduated follows in the same transaction"},{"name":"Graduated","contract":"CurveFactory","address":"0xD8c5d2860abFE05705E412e7debb3d1Fd2d46dDB","emitter":null,"signature":"Graduated(address,bytes32,uint256,address,uint256,uint256,uint256,uint160)","solidity":"event Graduated(address indexed token, bytes32 indexed poolId, uint256 indexed tokenId, address quote, uint256 quoteAmount, uint256 tokenAmount, uint256 tokensBurned, uint160 sqrtPriceX96)","topic0":"0xd4df01b899fd11e56dd1988cc7505f0cb8fcbf6e06af3a4d3ee20936f3529072","indexes":"bb_launches.pool_id / token_id / graduated / hooks + bb_launch_pools (token_is_currency0 by address order) + bb_curve_launches.graduated (phase 3)"},{"name":"AirdropReserved","contract":"CurveFactory","address":"0xD8c5d2860abFE05705E412e7debb3d1Fd2d46dDB","emitter":null,"signature":"AirdropReserved(address,address,uint256)","solidity":"event AirdropReserved(address indexed token, address indexed pool, uint256 amount)","topic0":"0xe55be1cdc3273dff1821789e780f247efc390b92c95703b8a1715aecc6435662","indexes":"bb_curve_launches.airdrop_pool (API: airdrop_pool): the reserve landed in its AirdropPool at createGraduatedPool, after Graduated","note":"the pool pays holders pro-rata in the token itself (Rewarded, in launch tokens); its burnTokenLeg is distributor-only and dust-only"},{"name":"PoolRegistered","contract":"CurveHook","address":"0xeA1A065e89611999bADfcBa24305d71Ac2fBa844","emitter":null,"signature":"PoolRegistered(bytes32,address,address,address,uint16,uint16,uint40,uint32,uint16)","solidity":"event PoolRegistered(bytes32 indexed poolId, address indexed token, address indexed quote, address creator, uint16 feeBps, uint16 creatorTaxBps, uint40 openedAt, uint32 snipeWindow, uint16 snipeStartBps)","topic0":"0xbac2eecacb7fe6eb2a802a459146a15156726c2bba844132bf4140f188cc788a","indexes":"bb_curve_launches.pool_opened_at / snipe_window / snipe_start_bps (API: pool_opened_at): the shield's clock starts at openedAt","note":"live: CurveHook.currentBuyChargeBps(poolId) = fee + creator tax + snipe tax on a buy right now; snipeShieldOf(poolId) = (openedAt, window, startBps, endsAt)"},{"name":"FeesSwept","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"FeesSwept(uint256,uint256,uint256)","solidity":"event FeesSwept(uint256 protocolAmount, uint256 creatorAmount, uint256 creatorTax)","topic0":"0x9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f","indexes":"bb_launch_fee_events (kind collected)"},{"name":"Abandoned","contract":"CurveFactory","address":"0xD8c5d2860abFE05705E412e7debb3d1Fd2d46dDB","emitter":null,"signature":"Abandoned(address,address,uint256,uint256)","solidity":"event Abandoned(address indexed token, address indexed venue, uint256 refundQuote, uint256 refundSupply)","topic0":"0x56189f752f9a4ea9b583fa556ef1d10e6993eaa22c72ade4f03c9a63c80a5fde","indexes":"bb_curve_launches.phase = 4, refunding, refund_venue, refund_quote, refund_supply + bb_launches.refunding","note":"BondingCurve emits CurveAbandoned(refundQuote, refundSupply, tokensBurned) when the curve itself is the refund venue"},{"name":"Redeemed","contract":"CurveFactory","address":"0xD8c5d2860abFE05705E412e7debb3d1Fd2d46dDB","emitter":null,"signature":"Redeemed(address,address,uint256,uint256)","solidity":"event Redeemed(address indexed token, address indexed holder, uint256 tokensIn, uint256 quoteOut)","topic0":"0x5cdf07ad0fc222442720b108e3ed4c4640f0fadc2ab2253e66f259a0fea83480","indexes":"bb_curve_redemptions + bb_curve_launches.redeemed","note":"BondingCurve emits Redeemed(holder, tokensIn, quoteOut) at the curve venue: same table"},{"name":"Swap","contract":"PoolManager (Uniswap v4)","address":"0x498581fF718922c3f8e6A244956aF099B2652b2b","emitter":null,"signature":"Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24)","solidity":"event Swap(bytes32 indexed id, address indexed sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee)","topic0":"0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f","indexes":"bb_launch_swaps (filtered by the launch pool ids: topic1 = poolId) + rolling price / volume / buys / sells on bb_launches and bb_launch_pools","note":"stored in the quote = currency0 convention: a graduated curve pool whose token sorts first has its legs swapped and sqrtPrice inverted (2^192 / sqrtPriceX96)"},{"name":"PoolFeesCollected","contract":"CurveHook","address":"0xeA1A065e89611999bADfcBa24305d71Ac2fBa844","emitter":null,"signature":"PoolFeesCollected(bytes32,address,uint256,uint256,uint256)","solidity":"event PoolFeesCollected(bytes32 indexed poolId, address indexed currency, uint256 protocolAmount, uint256 creatorAmount, uint256 taxAmount)","topic0":"0x68319b9c14504932188cf18fd430081408f4e8cc877910e4772b09e73ba72821","indexes":"bb_launch_fee_events (kind collected) + bb_launches.fees_quote_collected / fees_token_collected"},{"name":"Collected","contract":"LaunchLocker","address":"0x52b459199c054A5503F72811Ee7C368956927c1F","emitter":null,"signature":"Collected(uint256,address,uint256,uint256)","solidity":"event Collected(uint256 indexed tokenId, address indexed token, uint256 quoteAmount, uint256 tokenAmount)","topic0":"0xe985bb809569e1ab693b8d0a44015cb780fa698a4b16df55472d8eeffa185b39","indexes":"bb_launch_fee_events (kind collected) + bb_launches.fees_quote_collected / fees_token_collected"},{"name":"Paid","contract":"LaunchLocker","address":"0x52b459199c054A5503F72811Ee7C368956927c1F","emitter":null,"signature":"Paid(uint256,address,address,uint256)","solidity":"event Paid(uint256 indexed tokenId, address indexed account, address indexed currency, uint256 amount)","topic0":"0x2a156326ec22774ffa31f45f5f5990405e41eb6fe44e1d600934ab445cf3c0c1","indexes":"bb_launch_fee_events (kind paid; account = the recipient, currency, amount)"},{"name":"Burned","contract":"LaunchLocker","address":"0x52b459199c054A5503F72811Ee7C368956927c1F","emitter":null,"signature":"Burned(uint256,address,uint256)","solidity":"event Burned(uint256 indexed tokenId, address indexed currency, uint256 amount)","topic0":"0x7a6396f9141e42bbd82eddb43e30077ef07aaafcd4ee3dfbd6adb1dca8f2445a","indexes":"bb_launch_fee_events (kind burned) + bb_launches.fees_quote_burned / fees_token_burned"},{"name":"ProtocolBurned","contract":"LaunchLocker","address":"0x52b459199c054A5503F72811Ee7C368956927c1F","emitter":null,"signature":"ProtocolBurned(uint256,address,uint256)","solidity":"event ProtocolBurned(uint256 indexed tokenId, address indexed token, uint256 amount)","topic0":"0x6bae6d2d751347b78b8b6df28f4237035c84cb589fe6b90dabda8ba05bc1e7c5","indexes":"bb_launch_fee_events (kind protocol_burn): the coin leg of the protocol share, sent to the dead address at collect time"},{"name":"ProtocolBurned","contract":"FeeSplitter (CurveHook, curve locker)","address":null,"emitter":"the CurveHook and the CurveFactory's locker (both FeeSplitters)","signature":"ProtocolBurned(address,uint256)","solidity":"event ProtocolBurned(address indexed token, uint256 amount)","topic0":"0xdd67fcf03eff90a877db609aef3742829b09597a5a304114ec25dc0f271fb14d","indexes":"bb_launch_fee_events (kind protocol_burn) for graduated curve pools"},{"name":"Credited","contract":"LaunchLocker","address":"0x52b459199c054A5503F72811Ee7C368956927c1F","emitter":null,"signature":"Credited(address,address,uint256)","solidity":"event Credited(address indexed account, address indexed currency, uint256 amount)","topic0":"0x4e45da441832cf53bdaa69235704fc0575e68210f459ee1562911024b12967d5","indexes":"bb_launch_fee_events (kind credited): a recipient that could not receive was credited; claim(currency) pays it later"},{"name":"Claimed","contract":"LaunchLocker","address":"0x52b459199c054A5503F72811Ee7C368956927c1F","emitter":null,"signature":"Claimed(address,address,uint256)","solidity":"event Claimed(address indexed account, address indexed currency, uint256 amount)","topic0":"0xf7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683","indexes":"bb_launch_fee_events (kind claimed)"},{"name":"Distributed","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"Distributed(uint256,uint256,uint256)","solidity":"event Distributed(uint256 indexed round, uint256 holders, uint256 amount)","topic0":"0xc5d35a65af09b3042394b742529d10f7fbf9a37294d6b13e4d63d06f9909a15b","indexes":"not stored: the sum of a round's Rewarded rows"},{"name":"Rewarded","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"Rewarded(uint256,address,uint256)","solidity":"event Rewarded(uint256 indexed round, address indexed holder, uint256 amount)","topic0":"0x6d46424d7308d93179bbc5c8c01e098e8353dad13aff9809fd8a881a69feaa3a","indexes":"bb_rewards (holder, round, amount in the quote asset)"},{"name":"TokenLegBurned","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"TokenLegBurned(uint256)","solidity":"event TokenLegBurned(uint256 amount)","topic0":"0x76a36c38271909275ee6eecb21d4449967c6cfcf8548fd5e1b5aeb5ed5952fe3","indexes":"bb_rewards (holder = 0x000000000000000000000000000000000000dead, round 0, amount in launch tokens)"},{"name":"Rewarded","contract":"AirdropPool","address":null,"emitter":"the launch's AirdropPool (AirdropReserved.pool; bb_curve_launches.airdrop_pool), a RewardPool quoted in the token itself","signature":"Rewarded(uint256,address,uint256)","solidity":"event Rewarded(uint256 indexed round, address indexed holder, uint256 amount)","topic0":"0x6d46424d7308d93179bbc5c8c01e098e8353dad13aff9809fd8a881a69feaa3a","indexes":"not stored: read totalDistributed() / rounds() on the pool; amounts are in the launch token (the pot IS the airdrop)"},{"name":"TokenLegBurned","contract":"AirdropPool","address":null,"emitter":"the launch's AirdropPool (AirdropReserved.pool; bb_curve_launches.airdrop_pool), a RewardPool quoted in the token itself","signature":"TokenLegBurned(uint256)","solidity":"event TokenLegBurned(uint256 amount)","topic0":"0x76a36c38271909275ee6eecb21d4449967c6cfcf8548fd5e1b5aeb5ed5952fe3","indexes":"not stored: the dust the distributor burned once the pot was under BURN_DUST_BPS of what it had paid out"},{"name":"Split","contract":"FeeRouter","address":"0xd06e0accc1EA626E98b8A8ad4D44ec405C2f1DB6","emitter":null,"signature":"Split(address,uint256,uint256)","solidity":"event Split(address indexed currency, uint256 treasuryAmount, uint256 payeeAmount)","topic0":"0x5d95162205dc900555172b9649799b0334d5c456a8c9d875524229cd73416d4b","indexes":"bb_fee_splits (treasury_amount to the cold wallet, payee_amount to the FeeRouter's payee); Forwarded fires once per leg and is not stored"},{"name":"VaultDeployed","contract":"SocialVaultFactory","address":"0xcc976c58705673bd349E0d1A9f0812575c29bdA1","emitter":null,"signature":"VaultDeployed(bytes32,address,uint8,string)","solidity":"event VaultDeployed(bytes32 indexed handleHash, address indexed vault, uint8 indexed platformId, string handle)","topic0":"0xe36f96a5cc2b2ec9aafd9e3a53a704b0f022615e6a1b1ecc1913f0f523199970","indexes":"bb_x_vaults (handle_hash, handle, vault; the hash is keccak256(abi.encode(platformId, handle)))"},{"name":"Claimed","contract":"SocialVaultFactory","address":"0xcc976c58705673bd349E0d1A9f0812575c29bdA1","emitter":null,"signature":"Claimed(bytes32,address,address,address[],uint256[])","solidity":"event Claimed(bytes32 indexed handleHash, address indexed vault, address indexed to, address[] currencies, uint256[] amounts)","topic0":"0x95eecace84751e43183c30db83463452f4095af434d7128cb70691dd04fd7ef5","indexes":"bb_x_claims (vault, to_addr, currencies[], amounts[])"},{"name":"HandleBound","contract":"SocialVaultFactory","address":"0xcc976c58705673bd349E0d1A9f0812575c29bdA1","emitter":null,"signature":"HandleBound(bytes32,bytes32,uint8)","solidity":"event HandleBound(bytes32 indexed handleHash, bytes32 indexed userId, uint8 indexed platformId)","topic0":"0x089eb62e5e28daea29ada5ebaf37a1ec65094320080f3d150db33213aec31438","indexes":"bb_x_events (kind handle_bound: handle_hash, x_user_id = the bound account id)"},{"name":"VaultDeployed","contract":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","emitter":null,"signature":"VaultDeployed(bytes32,address,string)","solidity":"event VaultDeployed(bytes32 indexed handleHash, address indexed vault, string handle)","topic0":"0xc3d0e1e209e26cc94d58bd9d7cc2c68f49a275898e447d9034534ec19f265029","indexes":"bb_x_vaults (handle_hash, handle, vault) — v1, X only, superseded; nothing new pays these vaults"},{"name":"Claimed","contract":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","emitter":null,"signature":"Claimed(bytes32,address,address,address[],uint256[])","solidity":"event Claimed(bytes32 indexed handleHash, address indexed vault, address indexed to, address[] currencies, uint256[] amounts)","topic0":"0x95eecace84751e43183c30db83463452f4095af434d7128cb70691dd04fd7ef5","indexes":"bb_x_claims (vault, to_addr, currencies[], amounts[])"}],"constants":{"bps":10000,"feeSplit":{"protocolBps":3000,"creatorBps":7000,"protocolPct":30,"creatorPct":70},"protocolSplit":{"treasuryBps":5000,"payeeBps":5000,"payeeSharePctOfFee":15,"payee":"FeeRouter.payee(), a second protocol wallet","treasurySharePctOfFee":15,"timelockHours":24},"lpFee":{"minPips":10000,"maxPips":30000,"presetsPips":[10000,20000,30000],"note":"pips: 10000 = 1%"},"pool":{"tickSpacing":200,"quoteIsCurrency0":"always on LaunchFactory / ListingFactory pools; by address order on graduated curve pools (see bb_launch_pools.token_is_currency0)","defaultSupply":"1000000000000000000000000000","maxPools":4,"maxRecipients":7,"maxQuoteDecimals":18,"native":"0x0000000000000000000000000000000000000000","dead":"0x000000000000000000000000000000000000dEaD"},"curve":{"minFeeBps":100,"maxFeeBps":300,"maxCreatorTaxBps":1000,"maxTotalTradeFeeBps":2000,"abandonDelayS":259200,"phases":{"none":0,"trading":1,"swept":2,"graduated":3,"refunding":4}},"snipeTax":{"startBps":9900,"windowS":5,"schedule":[{"secondsSinceOpen":0,"bps":9900},{"secondsSinceOpen":1,"bps":1720},{"secondsSinceOpen":2,"bps":298},{"secondsSinceOpen":3,"bps":51},{"secondsSinceOpen":4,"bps":9},{"secondsSinceOpen":5,"bps":0}],"note":"the legacy shield; LaunchParams 0 / 0 selects it"},"snipeShield":{"legacy":{"windowS":5,"startBps":9900},"longWindowsS":[600,1200,1800],"longStartsBps":[5000,7500,9000],"note":"every (window, start) pair of the two lists is allowed; the long windows decay linearly"},"airdrop":{"optionsBps":[0,500,1000,1500]},"feeWarning":{"amberBps":500,"redBps":1000,"note":"per side = lpFee / 100 + creator_tax_bps; the site turns amber / red from these"},"votes":{"durationH":72,"weight":"min(balance when voting, balance when the vote closed), from the holder index","advisory":true},"formulas":{"directTokensPerQuote":"tokensPerQuote = (sqrtPriceX96 / 2^96)^2 * 10^(quoteDecimals - 18)","directQuotePerToken":"priceQuote = 1 / tokensPerQuote","directFromTick":"tokensPerQuote = 1.0001^tick * 10^(quoteDecimals - 18)","marketCap":"fdvQuote = priceQuote * supply / 1e18 (market cap = FDV: the whole supply is in the pool or in wallets, nothing is reserved); usd = fdvQuote * quoteUsd","tokenIsCurrency0":"when bb_launch_pools.token_is_currency0 (a graduated curve pool whose token sorts below its quote) use sqrtPriceX96' = 2^192 / sqrtPriceX96 and negate amounts; the API already returns the normalised form","curveReserves":"quoteReserve = phantomQuote + curveRaised; tokenReserve = supply - tokensSold (BondingCurve.getReserves())","curvePrice":"priceQuoteRaw = quoteReserve / tokenReserve (raw units); priceQuote = priceQuoteRaw * 10^(18 - quoteDecimals)","curveBuy":"tokensOut = (quoteIn - fee - tax) * tokenReserve / (quoteReserve + quoteIn - fee - tax); fee = quoteIn * feeBps / 10000; tax = quoteIn * creatorTaxBps / 10000","curveProgress":"progress = min(1, curveRaised / graduationThreshold)","curveGraduation":"graduates when curveRaised >= graduationThreshold, i.e. tokenReserve == reserved = supply * phantomQuote / (phantomQuote + graduationThreshold)","curveGraduationFdv":"fdvRawAtGraduation = (phantomQuote + graduationThreshold)^2 / phantomQuote","curvePoolTokens":"poolTokens = reserved * graduationThreshold / (phantomQuote + graduationThreshold); the rest of the reserve is burned at graduation","snipeTax":"legacy shield (snipe_window 5, snipe_start_bps 9900): taxBps(t) = 9900 * e^(-1.75 * floor(t)) for t < 5 s after the graduated pool opened, 0 after; long shields (snipe_window 600 | 1200 | 1800 s, snipe_start_bps 5000 | 7500 | 9000): taxBps(t) = start * (window - floor(t)) / window; charged on buys only, on top of fee + creator tax, total capped at 9900; t counts from pool_opened_at (PoolRegistered.openedAt)","buyCharge":"what a buy pays right now = CurveHook.currentBuyChargeBps(poolId) (fee + creator tax + snipe tax, bps of the output leg); sells pay fee + creator tax only","roundTripLoss":"per side s = lpFee (pips / 100) + creator_tax_bps; a buy followed by a sell keeps (1 - s)^2: loss = 1 - (1 - s)^2 (13% per side -> ~24%)","airdrop":"airdropTokens = supply * airdrop_bps / 10000 sits on the curve outside its maths (curveSupply = supply - airdropTokens: opening FDV, reserved and sellable are computed on curveSupply); at graduation it moves into airdrop_pool and is paid to holders pro-rata by balance; on abandon it is burned (never redeemable)","refund":"quoteOut = refundQuote * tokensIn / refundSupply (rounded down) at refund_venue while phase == 4"}}},"robinhood":{"key":"robinhood","chainId":4663,"name":"Robinhood Chain","status":"live","explorer":"https://robinhoodchain.blockscout.com","rpc":"https://rpc.mainnet.chain.robinhood.com","contracts":{"factory":{"name":"LaunchFactory","address":"0xa987eD06C8d386C796c4E49AA09Aa83361fbECc9","role":"deploys the token, opens the pool, locks the position; emits Launched"},"locker":{"name":"LaunchLocker","address":"0x943aa7E74De2C8A89296B2621a96c0947e490b53","role":"holds every launch position forever; collect() pays the fee split; emits Collected / Paid / Burned"},"feeRouter":{"name":"FeeRouter","address":"0xd06e0accc1EA626E98b8A8ad4D44ec405C2f1DB6","role":"the protocol's fee sink and the first recipient of every launch; forward() splits its balance 50 / 50; emits Split"},"xVaultFactory":{"name":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","role":"superseded by SocialVaultFactory; X-only fee vaults"},"socialVaultFactory":{"name":"SocialVaultFactory","address":"0x614e413586c5D298C0A1aF03436e4Cfcd81af40C","role":"deterministic fee vaults for a handle on a registered platform (1 = X, 2 = TikTok, 3 = Instagram, 4 = GitHub); emits VaultDeployed / Claimed / HandleBound"},"posterPoolFactory":{"name":"PosterPoolFactory","address":"0x9985E72DD5800F7257C6aC841A0A981bf4f99ede","role":"pay-the-posters payrolls: one PosterPool per launch (poolOf(params), CREATE2), rounds the site's attester signs and anyone relays (payRound); the pool caps cadence, per-winner share and holder status; emits PoolDeployed / RoundPaid"},"curveFactory":{"name":"CurveFactory","address":"0xa93A9b7A38D36B8882878558B178720592A79A4E","role":"bonding-curve launches and their graduation into a v4 pool; emits CurveLaunched / Graduated / Abandoned"},"curveHook":{"name":"CurveHook","address":"0x7779d6EddAbb17E8153b1d3e6dfb1379887D6844","role":"the hook on every graduated curve pool: fee split, snipe tax; emits PoolFeesCollected"},"listingFactory":{"name":"ListingFactory","address":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","role":"lists an existing ERC-20 into a locked pool (bring a coin); emits Listed"},"listingLocker":{"name":"LaunchLocker (listings)","address":"0xE722c1Ff8fE0a73A843c34181E4C53D49Db3179d","role":"the ListingFactory's own locker: the same events as the launch locker"},"liquidityGate":{"name":"LiquidityGate","address":"0xdac33249139E490DAFA09219e1EE125bf6f4a800","role":"the hook on every direct and listing pool: only the factories may add liquidity; never touches a swap"},"treasury":{"name":"Treasury","address":"0x65308a5440D9e05289b5DAD6A865d52a7DF74F6b","role":"the cold wallet: every launch fee and half of every forward()"},"vesting":{"name":"Vesting","address":null,"role":"the platform token's (NASDEGEN) team vesting contract"},"launchAndBuy":{"name":"LaunchAndBuy","address":"0x04D6cbA8b9b3B5A6D2D1F6f2F2C53e3EE65C720c","role":"atomic launch + first buy for direct launches; the factory records it as launcher, the creator is LaunchedVia.creator / creatorOf(token); emits LaunchedVia"},"multiLaunchRouter":{"name":"MultiLaunchRouter","address":"0x60fb5BCa73F258C5969317a225c4B57b6fEDaa80","role":"one signature, several chains: launches the home coin (like LaunchAndBuy) and sends a LayerZero V2 order per other chain; on each destination it launches that chain's SEPARATE coin for the same creator, with the same name, ticker and metadata. The factory records it as launcher; the creator is LaunchedVia.creator / creatorOf(token). Emits LaunchedVia, RemoteSent, RemoteLaunched, RemoteFailed. Null = not deployed here"},"twinBridge":{"name":"TwinBridge","address":null,"role":"a twin coin's LayerZero endpoint: it burns on the chain the coin leaves and mints on the chain it arrives, so ONE supply is shared across every chain that coin reaches, at one address. Null = the twin engine is not deployed here and every coin launched on this chain has its own separate supply"},"rulesFactoryV3":{"name":"RulesLaunchFactoryV3","address":"0xc03fc0f3D8Ba1Fe95D01212038721c5Ef7f8368a","role":"launches a RulesTokenV3 (hooks enforced by the coin on every transfer, optional custom hook program) into a RulesGate pool, optionally with a FeeVault whose game modes the coin feeds; emits Launched (LaunchFactory's shape), RulesLaunched, FeeVaultCreated. Null = not deployed here"},"customRulesEngine":{"name":"CustomRulesEngine","address":"0xDf3C3A7eEe6d3FAE0646B2AFA54B15B9e4c7d520","role":"the stateless interpreter every RulesTokenV3 runs its custom hook program on (validate / runSection are pure views). Null = not deployed here"},"rulesGovernor":{"name":"RulesGovernor","address":"0x455D4AbD35FD03765D110B9Ce8AF952727a71A99","role":"holder governance of a RulesTokenV3's governable knobs: deposit, propose, 3-day vote (3% quorum), 2-day timelock, execute. Null = not deployed here"},"feeStyleFactory":{"name":"FeeStyleLaunchFactory","address":"0x6ae0BD0ffdA8Db5930774EAC67525E0049832a9c","role":"plain launches into a dynamic-fee pool (fee 0x800000, tick spacing 200) whose FeeStyleHook sets every swap's LP fee (sniper decay, volatility, size); emits Launched (lpFee = 0x800000), FeeStyleLaunched. Null = not deployed here"},"feeStyleHook":{"name":"FeeStyleHook","address":"0xFa0651e29D1690D2B32c5897AC6a175EAd5D2880","role":"the hook on every fee-style pool: LiquidityGate plus a per-swap LP fee; quoteFee(key, params) gives the fee a swap pays now; emits StyleRegistered. Null = not deployed here"},"creatorFeeFactory":{"name":"CreatorFeeLaunchFactory","address":"0x34967D54e4B45aeDeD25649741eA6188eBa20CaC","role":"FeeStyleLaunchFactory's launch (same pool key on the FeeStyleHook, same Launched + FeeStyleLaunched events) with two creator-fee options fixed at launch: quoteOnly (creators paid only in the quote; the coin side of every fee is burned) and transferable (the current fee recipient can hand off future fees); emits CreatorFeeOptions(token, tokenId, quoteOnly, transferable). Null = not deployed here"},"creatorFeeLocker":{"name":"CreatorFeeLocker","address":"0x775cC0e6bdA38CBa7430a5eF0b92cCA1e83B6801","role":"the CreatorFeeLaunchFactory's locker: LaunchLocker's collect / claim and events, plus quoteOnlyOf / transferableOf, TokenLegBurned, and the two-step fee hand-off (proposeHandoff, acceptHandoff, cancelHandoff; HandoffProposed / HandedOff) that only a current creator recipient can start; recipientsOf(tokenId) is the live split. Null = not deployed here"},"pegFactory":{"name":"PegLaunchFactory","address":null,"role":"uPEG launches: a PegToken (every whole unit of the coin is a numbered object on its ERC-721 PegMirror) locked 100% in a LiquidityGate pool; emits Launched (LaunchFactory's shape) and PegLaunched(token, mirror, objects, unit, baseURI). Null = not deployed here"}},"v4":{"poolManager":"0x8366a39CC670B4001A1121B8F6A443A643e40951","positionManager":"0x58daec3116aae6D93017bAAea7749052E8a04fA7","stateView":"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b","quoter":"0x8dc178efb8111bb0973dd9d722ebeff267c98f94","universalRouter":"0x8876789976decbfcbbbe364623c63652db8c0904","permit2":"0x000000000022D473030F116dDEE9F6B43aC78BA3"},"swapLayout":"v2","quotes":[{"key":"usdg","address":"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168","symbol":"USDG","decimals":6},{"key":"eth","address":"0x0000000000000000000000000000000000000000","symbol":"ETH","decimals":18}],"events":[{"name":"Launched","contract":"LaunchFactory","address":"0xa987eD06C8d386C796c4E49AA09Aa83361fbECc9","emitter":null,"signature":"Launched(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Launched(address indexed token, uint256 indexed tokenId, address indexed launcher, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 supply, string metadataURI)","topic0":"0xda18b133e41a7fe4e3adc625c6eeaf9237558c875e411398a623cc9603aad0a9","indexes":"bb_launches (kind pool; one row per token, its first pool is the primary market) + bb_launch_pools (one row per pool)","note":"a multi-pair launch emits one Launched per pool with the same token"},{"name":"MultiPairLaunched","contract":"LaunchFactory","address":"0xa987eD06C8d386C796c4E49AA09Aa83361fbECc9","emitter":null,"signature":"MultiPairLaunched(address,bytes32[])","solidity":"event MultiPairLaunched(address indexed token, bytes32[] poolIds)","topic0":"0xa61112d06e0155d1f17b7bcef94fc48ca0406c6bc3152aca945cc8e835555479","indexes":"bb_launch_pools.pool_index (the pool set; factory.poolsOf(token) lists them with supply_bps)"},{"name":"RewardPoolCreated","contract":"LaunchFactory","address":"0xa987eD06C8d386C796c4E49AA09Aa83361fbECc9","emitter":null,"signature":"RewardPoolCreated(address,address,address)","solidity":"event RewardPoolCreated(address indexed token, address indexed pool, address indexed quote)","topic0":"0xcccf10613f67792eecfb9a80ab0ceb4928e43c66255e7a39e9dd5a2dad5bc103","indexes":"bb_launches.reward_pool (the holders fee mode: the creator share is paid to holders in the quote)"},{"name":"FeeVaultCreated","contract":"LaunchFactory","address":"0xa987eD06C8d386C796c4E49AA09Aa83361fbECc9","emitter":null,"signature":"FeeVaultCreated(address,address,address,uint8)","solidity":"event FeeVaultCreated(address indexed token, address indexed vault, address indexed quote, uint8 mode)","topic0":"0x255add866ba2eeef650e4e30a49e793bf95621d59796d33c2f5cfca46bc7300a","indexes":"bb_launches.fee_vault / fee_mode (creator fee modules; every FeeVault event lands in bb_vault_events)"},{"name":"LaunchedVia","contract":"LaunchAndBuy","address":"0x04D6cbA8b9b3B5A6D2D1F6f2F2C53e3EE65C720c","emitter":null,"signature":"LaunchedVia(address,address,uint256,uint256,uint256)","solidity":"event LaunchedVia(address indexed creator, address indexed token, uint256 tokenId, uint256 quoteIn, uint256 tokensOut)","topic0":"0x5bf63f84755bf9de4570848428b2e7a8fff53eb980b51ae4c555467365a14630","indexes":"bb_launches.creator: the wallet that launched through the router (the same tx's Launched names the router as launcher)","note":"treat Launched.launcher == LaunchAndBuy as creator = LaunchedVia.creator (router.creatorOf(token) on-chain) for display, edit rights and holder exclusions; quoteIn / tokensOut = the first buy"},{"name":"LaunchedVia","contract":"MultiLaunchRouter","address":"0x60fb5BCa73F258C5969317a225c4B57b6fEDaa80","emitter":null,"signature":"LaunchedVia(address,address,uint256,uint256,uint256)","solidity":"event LaunchedVia(address indexed creator, address indexed token, uint256 tokenId, uint256 quoteIn, uint256 tokensOut)","topic0":"0x5bf63f84755bf9de4570848428b2e7a8fff53eb980b51ae4c555467365a14630","indexes":"bb_launches.creator: the wallet that launched through the router, on the home chain AND on every remote chain (a remote launch lands in the LayerZero executor's transaction)","note":"same signature and hook as LaunchAndBuy.LaunchedVia"},{"name":"RemoteSent","contract":"MultiLaunchRouter","address":"0x60fb5BCa73F258C5969317a225c4B57b6fEDaa80","emitter":null,"signature":"RemoteSent(bytes32,uint32,address,address,uint256,uint256)","solidity":"event RemoteSent(bytes32 indexed guid, uint32 indexed dstEid, address indexed creator, address homeToken, uint256 lzFee, uint256 dstValue)","topic0":"0x76b0046ac2032fe0cd04a9038e0d21cffc7a4f5d7c922311087c4a293f377ca2","indexes":"not indexed: the home side of a multi-chain launch (guid, dstEid, creator, homeToken, LayerZero fee, destination value)"},{"name":"RemoteLaunched","contract":"MultiLaunchRouter","address":"0x60fb5BCa73F258C5969317a225c4B57b6fEDaa80","emitter":null,"signature":"RemoteLaunched(bytes32,uint32,address,address,address)","solidity":"event RemoteLaunched(bytes32 indexed guid, uint32 indexed srcEid, address indexed creator, address homeToken, address token)","topic0":"0x9224beb90f1ddab99a57022f03146f14d3841f624324c9b68153aed607ef8db0","indexes":"not indexed: the remote side (guid, srcEid, creator, homeToken, token); the family query links the coins by creator + ticker + name"},{"name":"RemoteFailed","contract":"MultiLaunchRouter","address":"0x60fb5BCa73F258C5969317a225c4B57b6fEDaa80","emitter":null,"signature":"RemoteFailed(bytes32,address,uint256,bytes,bytes)","solidity":"event RemoteFailed(bytes32 indexed guid, address indexed creator, uint256 value, bytes order, bytes reason)","topic0":"0x1e357a98aa3d95a113341baacebd2faf9e4a89416eee24fb5b6d30fa56e54eef","indexes":"not indexed: a remote launch that reverted; its value is held for the creator (retry / cancel on that chain)"},{"name":"Listed","contract":"ListingFactory","address":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","emitter":null,"signature":"Listed(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Listed(address indexed token, uint256 indexed tokenId, address indexed lister, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 amount, string metadataURI)","topic0":"0xad5a4aaa469875ff13658232c22a8ba97398205fa40bdf452cdbd83b1ee2d117","indexes":"bb_listings + bb_launches (kind listing, supply = the token's totalSupply) + bb_launch_pools"},{"name":"CurveLaunched","contract":"CurveFactory","address":"0xa93A9b7A38D36B8882878558B178720592A79A4E","emitter":null,"signature":"CurveLaunched(address,address,address,address,address,uint256,uint256,uint256,uint16,uint16,string)","solidity":"event CurveLaunched(address indexed token, address indexed curve, address indexed launcher, address quote, address creatorFeeRecipient, uint256 supply, uint256 phantomQuote, uint256 graduationThreshold, uint16 feeBps, uint16 creatorTaxBps, string metadataURI)","topic0":"0x41a83fcb07d214b946bf3ed8ff5921bef5a4459be08287b8fe86e3de08103c08","indexes":"bb_launches (kind curve, pool_id = the curve address, graduation_threshold, phantom_quote, creator_tax_bps) + bb_curve_launches (phase 1)"},{"name":"CurveLaunchOptions","contract":"CurveFactory","address":"0xa93A9b7A38D36B8882878558B178720592A79A4E","emitter":null,"signature":"CurveLaunchOptions(address,uint32,uint16,uint16,uint256)","solidity":"event CurveLaunchOptions(address indexed token, uint32 snipeWindow, uint16 snipeStartBps, uint16 airdropBps, uint256 airdropTokens)","topic0":"0x718dd73f4177b643a4c4da4072fb4f3b3ca5d40c5714252c6b1a547aea4b8ecd","indexes":"bb_curve_launches.snipe_window / snipe_start_bps / airdrop_bps (API: snipe_window, snipe_start_bps, airdrop_bps on the row)","note":"right after CurveLaunched; snipeWindow 5 / snipeStartBps 9900 = the legacy same-block shield, else a 600 / 1200 / 1800 s linear window from 5000 / 7500 / 9000 bps; airdropTokens = supply x airdropBps / 10000 is held off the curve and never sold"},{"name":"CurveBuy","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveBuy(address,address,uint256,uint256,uint256,uint256)","solidity":"event CurveBuy(address indexed buyer, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 fee, uint256 tax)","topic0":"0xec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc455","indexes":"bb_launch_swaps (pool_id = the curve, is_buy true, amount0 = -quoteIn, amount1 = tokensOut) + bb_launches.curve_raised += quoteIn - fee - tax"},{"name":"CurveSell","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveSell(address,address,uint256,uint256,uint256,uint256)","solidity":"event CurveSell(address indexed seller, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 fee, uint256 tax)","topic0":"0x8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df","indexes":"bb_launch_swaps (is_buy false) + bb_launches.curve_raised -= quoteOut"},{"name":"CurveCompleted","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveCompleted(address,uint256,uint256)","solidity":"event CurveCompleted(address indexed recipient, uint256 quoteOut, uint256 tokenOut)","topic0":"0xf8d37a90738ae063b8b8058b66f5880cf3cf7ab0c5d4fa78219696591dfbfb67","indexes":"not stored: the clearing trade; Graduated follows in the same transaction"},{"name":"Graduated","contract":"CurveFactory","address":"0xa93A9b7A38D36B8882878558B178720592A79A4E","emitter":null,"signature":"Graduated(address,bytes32,uint256,address,uint256,uint256,uint256,uint160)","solidity":"event Graduated(address indexed token, bytes32 indexed poolId, uint256 indexed tokenId, address quote, uint256 quoteAmount, uint256 tokenAmount, uint256 tokensBurned, uint160 sqrtPriceX96)","topic0":"0xd4df01b899fd11e56dd1988cc7505f0cb8fcbf6e06af3a4d3ee20936f3529072","indexes":"bb_launches.pool_id / token_id / graduated / hooks + bb_launch_pools (token_is_currency0 by address order) + bb_curve_launches.graduated (phase 3)"},{"name":"AirdropReserved","contract":"CurveFactory","address":"0xa93A9b7A38D36B8882878558B178720592A79A4E","emitter":null,"signature":"AirdropReserved(address,address,uint256)","solidity":"event AirdropReserved(address indexed token, address indexed pool, uint256 amount)","topic0":"0xe55be1cdc3273dff1821789e780f247efc390b92c95703b8a1715aecc6435662","indexes":"bb_curve_launches.airdrop_pool (API: airdrop_pool): the reserve landed in its AirdropPool at createGraduatedPool, after Graduated","note":"the pool pays holders pro-rata in the token itself (Rewarded, in launch tokens); its burnTokenLeg is distributor-only and dust-only"},{"name":"PoolRegistered","contract":"CurveHook","address":"0x7779d6EddAbb17E8153b1d3e6dfb1379887D6844","emitter":null,"signature":"PoolRegistered(bytes32,address,address,address,uint16,uint16,uint40,uint32,uint16)","solidity":"event PoolRegistered(bytes32 indexed poolId, address indexed token, address indexed quote, address creator, uint16 feeBps, uint16 creatorTaxBps, uint40 openedAt, uint32 snipeWindow, uint16 snipeStartBps)","topic0":"0xbac2eecacb7fe6eb2a802a459146a15156726c2bba844132bf4140f188cc788a","indexes":"bb_curve_launches.pool_opened_at / snipe_window / snipe_start_bps (API: pool_opened_at): the shield's clock starts at openedAt","note":"live: CurveHook.currentBuyChargeBps(poolId) = fee + creator tax + snipe tax on a buy right now; snipeShieldOf(poolId) = (openedAt, window, startBps, endsAt)"},{"name":"FeesSwept","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"FeesSwept(uint256,uint256,uint256)","solidity":"event FeesSwept(uint256 protocolAmount, uint256 creatorAmount, uint256 creatorTax)","topic0":"0x9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f","indexes":"bb_launch_fee_events (kind collected)"},{"name":"Abandoned","contract":"CurveFactory","address":"0xa93A9b7A38D36B8882878558B178720592A79A4E","emitter":null,"signature":"Abandoned(address,address,uint256,uint256)","solidity":"event Abandoned(address indexed token, address indexed venue, uint256 refundQuote, uint256 refundSupply)","topic0":"0x56189f752f9a4ea9b583fa556ef1d10e6993eaa22c72ade4f03c9a63c80a5fde","indexes":"bb_curve_launches.phase = 4, refunding, refund_venue, refund_quote, refund_supply + bb_launches.refunding","note":"BondingCurve emits CurveAbandoned(refundQuote, refundSupply, tokensBurned) when the curve itself is the refund venue"},{"name":"Redeemed","contract":"CurveFactory","address":"0xa93A9b7A38D36B8882878558B178720592A79A4E","emitter":null,"signature":"Redeemed(address,address,uint256,uint256)","solidity":"event Redeemed(address indexed token, address indexed holder, uint256 tokensIn, uint256 quoteOut)","topic0":"0x5cdf07ad0fc222442720b108e3ed4c4640f0fadc2ab2253e66f259a0fea83480","indexes":"bb_curve_redemptions + bb_curve_launches.redeemed","note":"BondingCurve emits Redeemed(holder, tokensIn, quoteOut) at the curve venue: same table"},{"name":"Swap","contract":"PoolManager (Uniswap v4)","address":"0x8366a39CC670B4001A1121B8F6A443A643e40951","emitter":null,"signature":"Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24)","solidity":"event Swap(bytes32 indexed id, address indexed sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee)","topic0":"0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f","indexes":"bb_launch_swaps (filtered by the launch pool ids: topic1 = poolId) + rolling price / volume / buys / sells on bb_launches and bb_launch_pools","note":"stored in the quote = currency0 convention: a graduated curve pool whose token sorts first has its legs swapped and sqrtPrice inverted (2^192 / sqrtPriceX96)"},{"name":"PoolFeesCollected","contract":"CurveHook","address":"0x7779d6EddAbb17E8153b1d3e6dfb1379887D6844","emitter":null,"signature":"PoolFeesCollected(bytes32,address,uint256,uint256,uint256)","solidity":"event PoolFeesCollected(bytes32 indexed poolId, address indexed currency, uint256 protocolAmount, uint256 creatorAmount, uint256 taxAmount)","topic0":"0x68319b9c14504932188cf18fd430081408f4e8cc877910e4772b09e73ba72821","indexes":"bb_launch_fee_events (kind collected) + bb_launches.fees_quote_collected / fees_token_collected"},{"name":"Collected","contract":"LaunchLocker","address":"0x943aa7E74De2C8A89296B2621a96c0947e490b53","emitter":null,"signature":"Collected(uint256,address,uint256,uint256)","solidity":"event Collected(uint256 indexed tokenId, address indexed token, uint256 quoteAmount, uint256 tokenAmount)","topic0":"0xe985bb809569e1ab693b8d0a44015cb780fa698a4b16df55472d8eeffa185b39","indexes":"bb_launch_fee_events (kind collected) + bb_launches.fees_quote_collected / fees_token_collected"},{"name":"Paid","contract":"LaunchLocker","address":"0x943aa7E74De2C8A89296B2621a96c0947e490b53","emitter":null,"signature":"Paid(uint256,address,address,uint256)","solidity":"event Paid(uint256 indexed tokenId, address indexed account, address indexed currency, uint256 amount)","topic0":"0x2a156326ec22774ffa31f45f5f5990405e41eb6fe44e1d600934ab445cf3c0c1","indexes":"bb_launch_fee_events (kind paid; account = the recipient, currency, amount)"},{"name":"Burned","contract":"LaunchLocker","address":"0x943aa7E74De2C8A89296B2621a96c0947e490b53","emitter":null,"signature":"Burned(uint256,address,uint256)","solidity":"event Burned(uint256 indexed tokenId, address indexed currency, uint256 amount)","topic0":"0x7a6396f9141e42bbd82eddb43e30077ef07aaafcd4ee3dfbd6adb1dca8f2445a","indexes":"bb_launch_fee_events (kind burned) + bb_launches.fees_quote_burned / fees_token_burned"},{"name":"ProtocolBurned","contract":"LaunchLocker","address":"0x943aa7E74De2C8A89296B2621a96c0947e490b53","emitter":null,"signature":"ProtocolBurned(uint256,address,uint256)","solidity":"event ProtocolBurned(uint256 indexed tokenId, address indexed token, uint256 amount)","topic0":"0x6bae6d2d751347b78b8b6df28f4237035c84cb589fe6b90dabda8ba05bc1e7c5","indexes":"bb_launch_fee_events (kind protocol_burn): the coin leg of the protocol share, sent to the dead address at collect time"},{"name":"ProtocolBurned","contract":"FeeSplitter (CurveHook, curve locker)","address":null,"emitter":"the CurveHook and the CurveFactory's locker (both FeeSplitters)","signature":"ProtocolBurned(address,uint256)","solidity":"event ProtocolBurned(address indexed token, uint256 amount)","topic0":"0xdd67fcf03eff90a877db609aef3742829b09597a5a304114ec25dc0f271fb14d","indexes":"bb_launch_fee_events (kind protocol_burn) for graduated curve pools"},{"name":"Credited","contract":"LaunchLocker","address":"0x943aa7E74De2C8A89296B2621a96c0947e490b53","emitter":null,"signature":"Credited(address,address,uint256)","solidity":"event Credited(address indexed account, address indexed currency, uint256 amount)","topic0":"0x4e45da441832cf53bdaa69235704fc0575e68210f459ee1562911024b12967d5","indexes":"bb_launch_fee_events (kind credited): a recipient that could not receive was credited; claim(currency) pays it later"},{"name":"Claimed","contract":"LaunchLocker","address":"0x943aa7E74De2C8A89296B2621a96c0947e490b53","emitter":null,"signature":"Claimed(address,address,uint256)","solidity":"event Claimed(address indexed account, address indexed currency, uint256 amount)","topic0":"0xf7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683","indexes":"bb_launch_fee_events (kind claimed)"},{"name":"Distributed","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"Distributed(uint256,uint256,uint256)","solidity":"event Distributed(uint256 indexed round, uint256 holders, uint256 amount)","topic0":"0xc5d35a65af09b3042394b742529d10f7fbf9a37294d6b13e4d63d06f9909a15b","indexes":"not stored: the sum of a round's Rewarded rows"},{"name":"Rewarded","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"Rewarded(uint256,address,uint256)","solidity":"event Rewarded(uint256 indexed round, address indexed holder, uint256 amount)","topic0":"0x6d46424d7308d93179bbc5c8c01e098e8353dad13aff9809fd8a881a69feaa3a","indexes":"bb_rewards (holder, round, amount in the quote asset)"},{"name":"TokenLegBurned","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"TokenLegBurned(uint256)","solidity":"event TokenLegBurned(uint256 amount)","topic0":"0x76a36c38271909275ee6eecb21d4449967c6cfcf8548fd5e1b5aeb5ed5952fe3","indexes":"bb_rewards (holder = 0x000000000000000000000000000000000000dead, round 0, amount in launch tokens)"},{"name":"Rewarded","contract":"AirdropPool","address":null,"emitter":"the launch's AirdropPool (AirdropReserved.pool; bb_curve_launches.airdrop_pool), a RewardPool quoted in the token itself","signature":"Rewarded(uint256,address,uint256)","solidity":"event Rewarded(uint256 indexed round, address indexed holder, uint256 amount)","topic0":"0x6d46424d7308d93179bbc5c8c01e098e8353dad13aff9809fd8a881a69feaa3a","indexes":"not stored: read totalDistributed() / rounds() on the pool; amounts are in the launch token (the pot IS the airdrop)"},{"name":"TokenLegBurned","contract":"AirdropPool","address":null,"emitter":"the launch's AirdropPool (AirdropReserved.pool; bb_curve_launches.airdrop_pool), a RewardPool quoted in the token itself","signature":"TokenLegBurned(uint256)","solidity":"event TokenLegBurned(uint256 amount)","topic0":"0x76a36c38271909275ee6eecb21d4449967c6cfcf8548fd5e1b5aeb5ed5952fe3","indexes":"not stored: the dust the distributor burned once the pot was under BURN_DUST_BPS of what it had paid out"},{"name":"Split","contract":"FeeRouter","address":"0xd06e0accc1EA626E98b8A8ad4D44ec405C2f1DB6","emitter":null,"signature":"Split(address,uint256,uint256)","solidity":"event Split(address indexed currency, uint256 treasuryAmount, uint256 payeeAmount)","topic0":"0x5d95162205dc900555172b9649799b0334d5c456a8c9d875524229cd73416d4b","indexes":"bb_fee_splits (treasury_amount to the cold wallet, payee_amount to the FeeRouter's payee); Forwarded fires once per leg and is not stored"},{"name":"VaultDeployed","contract":"SocialVaultFactory","address":"0x614e413586c5D298C0A1aF03436e4Cfcd81af40C","emitter":null,"signature":"VaultDeployed(bytes32,address,uint8,string)","solidity":"event VaultDeployed(bytes32 indexed handleHash, address indexed vault, uint8 indexed platformId, string handle)","topic0":"0xe36f96a5cc2b2ec9aafd9e3a53a704b0f022615e6a1b1ecc1913f0f523199970","indexes":"bb_x_vaults (handle_hash, handle, vault; the hash is keccak256(abi.encode(platformId, handle)))"},{"name":"Claimed","contract":"SocialVaultFactory","address":"0x614e413586c5D298C0A1aF03436e4Cfcd81af40C","emitter":null,"signature":"Claimed(bytes32,address,address,address[],uint256[])","solidity":"event Claimed(bytes32 indexed handleHash, address indexed vault, address indexed to, address[] currencies, uint256[] amounts)","topic0":"0x95eecace84751e43183c30db83463452f4095af434d7128cb70691dd04fd7ef5","indexes":"bb_x_claims (vault, to_addr, currencies[], amounts[])"},{"name":"HandleBound","contract":"SocialVaultFactory","address":"0x614e413586c5D298C0A1aF03436e4Cfcd81af40C","emitter":null,"signature":"HandleBound(bytes32,bytes32,uint8)","solidity":"event HandleBound(bytes32 indexed handleHash, bytes32 indexed userId, uint8 indexed platformId)","topic0":"0x089eb62e5e28daea29ada5ebaf37a1ec65094320080f3d150db33213aec31438","indexes":"bb_x_events (kind handle_bound: handle_hash, x_user_id = the bound account id)"},{"name":"VaultDeployed","contract":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","emitter":null,"signature":"VaultDeployed(bytes32,address,string)","solidity":"event VaultDeployed(bytes32 indexed handleHash, address indexed vault, string handle)","topic0":"0xc3d0e1e209e26cc94d58bd9d7cc2c68f49a275898e447d9034534ec19f265029","indexes":"bb_x_vaults (handle_hash, handle, vault) — v1, X only, superseded; nothing new pays these vaults"},{"name":"Claimed","contract":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","emitter":null,"signature":"Claimed(bytes32,address,address,address[],uint256[])","solidity":"event Claimed(bytes32 indexed handleHash, address indexed vault, address indexed to, address[] currencies, uint256[] amounts)","topic0":"0x95eecace84751e43183c30db83463452f4095af434d7128cb70691dd04fd7ef5","indexes":"bb_x_claims (vault, to_addr, currencies[], amounts[])"}],"constants":{"bps":10000,"feeSplit":{"protocolBps":3000,"creatorBps":7000,"protocolPct":30,"creatorPct":70},"protocolSplit":{"treasuryBps":5000,"payeeBps":5000,"payeeSharePctOfFee":15,"payee":"FeeRouter.payee(), a second protocol wallet","treasurySharePctOfFee":15,"timelockHours":24},"lpFee":{"minPips":10000,"maxPips":30000,"presetsPips":[10000,20000,30000],"note":"pips: 10000 = 1%"},"pool":{"tickSpacing":200,"quoteIsCurrency0":"always on LaunchFactory / ListingFactory pools; by address order on graduated curve pools (see bb_launch_pools.token_is_currency0)","defaultSupply":"1000000000000000000000000000","maxPools":4,"maxRecipients":7,"maxQuoteDecimals":18,"native":"0x0000000000000000000000000000000000000000","dead":"0x000000000000000000000000000000000000dEaD"},"curve":{"minFeeBps":100,"maxFeeBps":300,"maxCreatorTaxBps":1000,"maxTotalTradeFeeBps":2000,"abandonDelayS":259200,"phases":{"none":0,"trading":1,"swept":2,"graduated":3,"refunding":4}},"snipeTax":{"startBps":9900,"windowS":5,"schedule":[{"secondsSinceOpen":0,"bps":9900},{"secondsSinceOpen":1,"bps":1720},{"secondsSinceOpen":2,"bps":298},{"secondsSinceOpen":3,"bps":51},{"secondsSinceOpen":4,"bps":9},{"secondsSinceOpen":5,"bps":0}],"note":"the legacy shield; LaunchParams 0 / 0 selects it"},"snipeShield":{"legacy":{"windowS":5,"startBps":9900},"longWindowsS":[600,1200,1800],"longStartsBps":[5000,7500,9000],"note":"every (window, start) pair of the two lists is allowed; the long windows decay linearly"},"airdrop":{"optionsBps":[0,500,1000,1500]},"feeWarning":{"amberBps":500,"redBps":1000,"note":"per side = lpFee / 100 + creator_tax_bps; the site turns amber / red from these"},"votes":{"durationH":72,"weight":"min(balance when voting, balance when the vote closed), from the holder index","advisory":true},"formulas":{"directTokensPerQuote":"tokensPerQuote = (sqrtPriceX96 / 2^96)^2 * 10^(quoteDecimals - 18)","directQuotePerToken":"priceQuote = 1 / tokensPerQuote","directFromTick":"tokensPerQuote = 1.0001^tick * 10^(quoteDecimals - 18)","marketCap":"fdvQuote = priceQuote * supply / 1e18 (market cap = FDV: the whole supply is in the pool or in wallets, nothing is reserved); usd = fdvQuote * quoteUsd","tokenIsCurrency0":"when bb_launch_pools.token_is_currency0 (a graduated curve pool whose token sorts below its quote) use sqrtPriceX96' = 2^192 / sqrtPriceX96 and negate amounts; the API already returns the normalised form","curveReserves":"quoteReserve = phantomQuote + curveRaised; tokenReserve = supply - tokensSold (BondingCurve.getReserves())","curvePrice":"priceQuoteRaw = quoteReserve / tokenReserve (raw units); priceQuote = priceQuoteRaw * 10^(18 - quoteDecimals)","curveBuy":"tokensOut = (quoteIn - fee - tax) * tokenReserve / (quoteReserve + quoteIn - fee - tax); fee = quoteIn * feeBps / 10000; tax = quoteIn * creatorTaxBps / 10000","curveProgress":"progress = min(1, curveRaised / graduationThreshold)","curveGraduation":"graduates when curveRaised >= graduationThreshold, i.e. tokenReserve == reserved = supply * phantomQuote / (phantomQuote + graduationThreshold)","curveGraduationFdv":"fdvRawAtGraduation = (phantomQuote + graduationThreshold)^2 / phantomQuote","curvePoolTokens":"poolTokens = reserved * graduationThreshold / (phantomQuote + graduationThreshold); the rest of the reserve is burned at graduation","snipeTax":"legacy shield (snipe_window 5, snipe_start_bps 9900): taxBps(t) = 9900 * e^(-1.75 * floor(t)) for t < 5 s after the graduated pool opened, 0 after; long shields (snipe_window 600 | 1200 | 1800 s, snipe_start_bps 5000 | 7500 | 9000): taxBps(t) = start * (window - floor(t)) / window; charged on buys only, on top of fee + creator tax, total capped at 9900; t counts from pool_opened_at (PoolRegistered.openedAt)","buyCharge":"what a buy pays right now = CurveHook.currentBuyChargeBps(poolId) (fee + creator tax + snipe tax, bps of the output leg); sells pay fee + creator tax only","roundTripLoss":"per side s = lpFee (pips / 100) + creator_tax_bps; a buy followed by a sell keeps (1 - s)^2: loss = 1 - (1 - s)^2 (13% per side -> ~24%)","airdrop":"airdropTokens = supply * airdrop_bps / 10000 sits on the curve outside its maths (curveSupply = supply - airdropTokens: opening FDV, reserved and sellable are computed on curveSupply); at graduation it moves into airdrop_pool and is paid to holders pro-rata by balance; on abandon it is burned (never redeemable)","refund":"quoteOut = refundQuote * tokensIn / refundSupply (rounded down) at refund_venue while phase == 4"}}},"bnb":{"key":"bnb","chainId":56,"name":"BNB Chain","status":"live","explorer":"https://bscscan.com","rpc":"https://bsc-rpc.publicnode.com","contracts":{"factory":{"name":"LaunchFactory","address":"0xaB7FFC770fF5e7FeD0677c179e897A690ed4eBD9","role":"deploys the token, opens the pool, locks the position; emits Launched"},"locker":{"name":"LaunchLocker","address":"0x324b59d4705d40527B3C64dA9803f7E80f120F43","role":"holds every launch position forever; collect() pays the fee split; emits Collected / Paid / Burned"},"feeRouter":{"name":"FeeRouter","address":"0xd06e0accc1EA626E98b8A8ad4D44ec405C2f1DB6","role":"the protocol's fee sink and the first recipient of every launch; forward() splits its balance 50 / 50; emits Split"},"xVaultFactory":{"name":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","role":"superseded by SocialVaultFactory; X-only fee vaults"},"socialVaultFactory":{"name":"SocialVaultFactory","address":"0xCAe11577F88d7bF8E4fb1DDB241556f008C32F25","role":"deterministic fee vaults for a handle on a registered platform (1 = X, 2 = TikTok, 3 = Instagram, 4 = GitHub); emits VaultDeployed / Claimed / HandleBound"},"posterPoolFactory":{"name":"PosterPoolFactory","address":"0x7418B19a20E693377703325fe15b25599724E2D5","role":"pay-the-posters payrolls: one PosterPool per launch (poolOf(params), CREATE2), rounds the site's attester signs and anyone relays (payRound); the pool caps cadence, per-winner share and holder status; emits PoolDeployed / RoundPaid"},"curveFactory":{"name":"CurveFactory","address":"0x0e5676B609CE83DD299A1025D188548764A913e4","role":"bonding-curve launches and their graduation into a v4 pool; emits CurveLaunched / Graduated / Abandoned"},"curveHook":{"name":"CurveHook","address":"0x5214be97Ac1D5F4d86a378A5B75B289f114ba844","role":"the hook on every graduated curve pool: fee split, snipe tax; emits PoolFeesCollected"},"listingFactory":{"name":"ListingFactory","address":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","role":"lists an existing ERC-20 into a locked pool (bring a coin); emits Listed"},"listingLocker":{"name":"LaunchLocker (listings)","address":"0xE722c1Ff8fE0a73A843c34181E4C53D49Db3179d","role":"the ListingFactory's own locker: the same events as the launch locker"},"liquidityGate":{"name":"LiquidityGate","address":"0xC210DE2457fBeC8a7A8C6D884cc2259E4C102800","role":"the hook on every direct and listing pool: only the factories may add liquidity; never touches a swap"},"treasury":{"name":"Treasury","address":"0x65308a5440D9e05289b5DAD6A865d52a7DF74F6b","role":"the cold wallet: every launch fee and half of every forward()"},"vesting":{"name":"Vesting","address":null,"role":"the platform token's (NASDEGEN) team vesting contract"},"launchAndBuy":{"name":"LaunchAndBuy","address":"0xcBEB49eE51706D6C169276f44F5A613594586Bf2","role":"atomic launch + first buy for direct launches; the factory records it as launcher, the creator is LaunchedVia.creator / creatorOf(token); emits LaunchedVia"},"multiLaunchRouter":{"name":"MultiLaunchRouter","address":"0x71346E21004F8aa2157094996e073741Cb2eCC8F","role":"one signature, several chains: launches the home coin (like LaunchAndBuy) and sends a LayerZero V2 order per other chain; on each destination it launches that chain's SEPARATE coin for the same creator, with the same name, ticker and metadata. The factory records it as launcher; the creator is LaunchedVia.creator / creatorOf(token). Emits LaunchedVia, RemoteSent, RemoteLaunched, RemoteFailed. Null = not deployed here"},"twinBridge":{"name":"TwinBridge","address":null,"role":"a twin coin's LayerZero endpoint: it burns on the chain the coin leaves and mints on the chain it arrives, so ONE supply is shared across every chain that coin reaches, at one address. Null = the twin engine is not deployed here and every coin launched on this chain has its own separate supply"},"rulesFactoryV3":{"name":"RulesLaunchFactoryV3","address":"0x6A92BfcFaa107ba8686D4285521f5C7d67F16f6B","role":"launches a RulesTokenV3 (hooks enforced by the coin on every transfer, optional custom hook program) into a RulesGate pool, optionally with a FeeVault whose game modes the coin feeds; emits Launched (LaunchFactory's shape), RulesLaunched, FeeVaultCreated. Null = not deployed here"},"customRulesEngine":{"name":"CustomRulesEngine","address":"0xDf3C3A7eEe6d3FAE0646B2AFA54B15B9e4c7d520","role":"the stateless interpreter every RulesTokenV3 runs its custom hook program on (validate / runSection are pure views). Null = not deployed here"},"rulesGovernor":{"name":"RulesGovernor","address":"0x455D4AbD35FD03765D110B9Ce8AF952727a71A99","role":"holder governance of a RulesTokenV3's governable knobs: deposit, propose, 3-day vote (3% quorum), 2-day timelock, execute. Null = not deployed here"},"feeStyleFactory":{"name":"FeeStyleLaunchFactory","address":"0x8AE2ea8Cbd61869f8dF32563ECC38AD62A8141a9","role":"plain launches into a dynamic-fee pool (fee 0x800000, tick spacing 200) whose FeeStyleHook sets every swap's LP fee (sniper decay, volatility, size); emits Launched (lpFee = 0x800000), FeeStyleLaunched. Null = not deployed here"},"feeStyleHook":{"name":"FeeStyleHook","address":"0xC1cB0e098E709e9eB35989C200FDde5e6812e880","role":"the hook on every fee-style pool: LiquidityGate plus a per-swap LP fee; quoteFee(key, params) gives the fee a swap pays now; emits StyleRegistered. Null = not deployed here"},"creatorFeeFactory":{"name":"CreatorFeeLaunchFactory","address":"0x31637Eb0FaA1fE3EBFcF2939424979fB6aac8734","role":"FeeStyleLaunchFactory's launch (same pool key on the FeeStyleHook, same Launched + FeeStyleLaunched events) with two creator-fee options fixed at launch: quoteOnly (creators paid only in the quote; the coin side of every fee is burned) and transferable (the current fee recipient can hand off future fees); emits CreatorFeeOptions(token, tokenId, quoteOnly, transferable). Null = not deployed here"},"creatorFeeLocker":{"name":"CreatorFeeLocker","address":"0x8ea1A3F9CE26dEeAB8c349ef5cdCcdA67b2D7fe5","role":"the CreatorFeeLaunchFactory's locker: LaunchLocker's collect / claim and events, plus quoteOnlyOf / transferableOf, TokenLegBurned, and the two-step fee hand-off (proposeHandoff, acceptHandoff, cancelHandoff; HandoffProposed / HandedOff) that only a current creator recipient can start; recipientsOf(tokenId) is the live split. Null = not deployed here"},"pegFactory":{"name":"PegLaunchFactory","address":null,"role":"uPEG launches: a PegToken (every whole unit of the coin is a numbered object on its ERC-721 PegMirror) locked 100% in a LiquidityGate pool; emits Launched (LaunchFactory's shape) and PegLaunched(token, mirror, objects, unit, baseURI). Null = not deployed here"}},"v4":{"poolManager":"0x28e2Ea090877bF75740558f6BFB36A5ffeE9e9dF","positionManager":"0x7A4a5c919aE2541AeD11041A1AEeE68f1287f95b","stateView":"0xd13Dd3D6E93f276FAFc9Db9E6bB47C1180aeE0c4","quoter":"0x9F75dD27D6664c475B90e105573E550ff69437B0","universalRouter":"0x1906c1d672b88cD1B9aC7593301cA990F94Eae07","permit2":"0x000000000022D473030F116dDEE9F6B43aC78BA3"},"swapLayout":"v1","quotes":[{"key":"eth","address":"0x0000000000000000000000000000000000000000","symbol":"BNB","decimals":18}],"events":[{"name":"Launched","contract":"LaunchFactory","address":"0xaB7FFC770fF5e7FeD0677c179e897A690ed4eBD9","emitter":null,"signature":"Launched(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Launched(address indexed token, uint256 indexed tokenId, address indexed launcher, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 supply, string metadataURI)","topic0":"0xda18b133e41a7fe4e3adc625c6eeaf9237558c875e411398a623cc9603aad0a9","indexes":"bb_launches (kind pool; one row per token, its first pool is the primary market) + bb_launch_pools (one row per pool)","note":"a multi-pair launch emits one Launched per pool with the same token"},{"name":"MultiPairLaunched","contract":"LaunchFactory","address":"0xaB7FFC770fF5e7FeD0677c179e897A690ed4eBD9","emitter":null,"signature":"MultiPairLaunched(address,bytes32[])","solidity":"event MultiPairLaunched(address indexed token, bytes32[] poolIds)","topic0":"0xa61112d06e0155d1f17b7bcef94fc48ca0406c6bc3152aca945cc8e835555479","indexes":"bb_launch_pools.pool_index (the pool set; factory.poolsOf(token) lists them with supply_bps)"},{"name":"RewardPoolCreated","contract":"LaunchFactory","address":"0xaB7FFC770fF5e7FeD0677c179e897A690ed4eBD9","emitter":null,"signature":"RewardPoolCreated(address,address,address)","solidity":"event RewardPoolCreated(address indexed token, address indexed pool, address indexed quote)","topic0":"0xcccf10613f67792eecfb9a80ab0ceb4928e43c66255e7a39e9dd5a2dad5bc103","indexes":"bb_launches.reward_pool (the holders fee mode: the creator share is paid to holders in the quote)"},{"name":"FeeVaultCreated","contract":"LaunchFactory","address":"0xaB7FFC770fF5e7FeD0677c179e897A690ed4eBD9","emitter":null,"signature":"FeeVaultCreated(address,address,address,uint8)","solidity":"event FeeVaultCreated(address indexed token, address indexed vault, address indexed quote, uint8 mode)","topic0":"0x255add866ba2eeef650e4e30a49e793bf95621d59796d33c2f5cfca46bc7300a","indexes":"bb_launches.fee_vault / fee_mode (creator fee modules; every FeeVault event lands in bb_vault_events)"},{"name":"LaunchedVia","contract":"LaunchAndBuy","address":"0xcBEB49eE51706D6C169276f44F5A613594586Bf2","emitter":null,"signature":"LaunchedVia(address,address,uint256,uint256,uint256)","solidity":"event LaunchedVia(address indexed creator, address indexed token, uint256 tokenId, uint256 quoteIn, uint256 tokensOut)","topic0":"0x5bf63f84755bf9de4570848428b2e7a8fff53eb980b51ae4c555467365a14630","indexes":"bb_launches.creator: the wallet that launched through the router (the same tx's Launched names the router as launcher)","note":"treat Launched.launcher == LaunchAndBuy as creator = LaunchedVia.creator (router.creatorOf(token) on-chain) for display, edit rights and holder exclusions; quoteIn / tokensOut = the first buy"},{"name":"LaunchedVia","contract":"MultiLaunchRouter","address":"0x71346E21004F8aa2157094996e073741Cb2eCC8F","emitter":null,"signature":"LaunchedVia(address,address,uint256,uint256,uint256)","solidity":"event LaunchedVia(address indexed creator, address indexed token, uint256 tokenId, uint256 quoteIn, uint256 tokensOut)","topic0":"0x5bf63f84755bf9de4570848428b2e7a8fff53eb980b51ae4c555467365a14630","indexes":"bb_launches.creator: the wallet that launched through the router, on the home chain AND on every remote chain (a remote launch lands in the LayerZero executor's transaction)","note":"same signature and hook as LaunchAndBuy.LaunchedVia"},{"name":"RemoteSent","contract":"MultiLaunchRouter","address":"0x71346E21004F8aa2157094996e073741Cb2eCC8F","emitter":null,"signature":"RemoteSent(bytes32,uint32,address,address,uint256,uint256)","solidity":"event RemoteSent(bytes32 indexed guid, uint32 indexed dstEid, address indexed creator, address homeToken, uint256 lzFee, uint256 dstValue)","topic0":"0x76b0046ac2032fe0cd04a9038e0d21cffc7a4f5d7c922311087c4a293f377ca2","indexes":"not indexed: the home side of a multi-chain launch (guid, dstEid, creator, homeToken, LayerZero fee, destination value)"},{"name":"RemoteLaunched","contract":"MultiLaunchRouter","address":"0x71346E21004F8aa2157094996e073741Cb2eCC8F","emitter":null,"signature":"RemoteLaunched(bytes32,uint32,address,address,address)","solidity":"event RemoteLaunched(bytes32 indexed guid, uint32 indexed srcEid, address indexed creator, address homeToken, address token)","topic0":"0x9224beb90f1ddab99a57022f03146f14d3841f624324c9b68153aed607ef8db0","indexes":"not indexed: the remote side (guid, srcEid, creator, homeToken, token); the family query links the coins by creator + ticker + name"},{"name":"RemoteFailed","contract":"MultiLaunchRouter","address":"0x71346E21004F8aa2157094996e073741Cb2eCC8F","emitter":null,"signature":"RemoteFailed(bytes32,address,uint256,bytes,bytes)","solidity":"event RemoteFailed(bytes32 indexed guid, address indexed creator, uint256 value, bytes order, bytes reason)","topic0":"0x1e357a98aa3d95a113341baacebd2faf9e4a89416eee24fb5b6d30fa56e54eef","indexes":"not indexed: a remote launch that reverted; its value is held for the creator (retry / cancel on that chain)"},{"name":"Listed","contract":"ListingFactory","address":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","emitter":null,"signature":"Listed(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Listed(address indexed token, uint256 indexed tokenId, address indexed lister, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 amount, string metadataURI)","topic0":"0xad5a4aaa469875ff13658232c22a8ba97398205fa40bdf452cdbd83b1ee2d117","indexes":"bb_listings + bb_launches (kind listing, supply = the token's totalSupply) + bb_launch_pools"},{"name":"CurveLaunched","contract":"CurveFactory","address":"0x0e5676B609CE83DD299A1025D188548764A913e4","emitter":null,"signature":"CurveLaunched(address,address,address,address,address,uint256,uint256,uint256,uint16,uint16,string)","solidity":"event CurveLaunched(address indexed token, address indexed curve, address indexed launcher, address quote, address creatorFeeRecipient, uint256 supply, uint256 phantomQuote, uint256 graduationThreshold, uint16 feeBps, uint16 creatorTaxBps, string metadataURI)","topic0":"0x41a83fcb07d214b946bf3ed8ff5921bef5a4459be08287b8fe86e3de08103c08","indexes":"bb_launches (kind curve, pool_id = the curve address, graduation_threshold, phantom_quote, creator_tax_bps) + bb_curve_launches (phase 1)"},{"name":"CurveLaunchOptions","contract":"CurveFactory","address":"0x0e5676B609CE83DD299A1025D188548764A913e4","emitter":null,"signature":"CurveLaunchOptions(address,uint32,uint16,uint16,uint256)","solidity":"event CurveLaunchOptions(address indexed token, uint32 snipeWindow, uint16 snipeStartBps, uint16 airdropBps, uint256 airdropTokens)","topic0":"0x718dd73f4177b643a4c4da4072fb4f3b3ca5d40c5714252c6b1a547aea4b8ecd","indexes":"bb_curve_launches.snipe_window / snipe_start_bps / airdrop_bps (API: snipe_window, snipe_start_bps, airdrop_bps on the row)","note":"right after CurveLaunched; snipeWindow 5 / snipeStartBps 9900 = the legacy same-block shield, else a 600 / 1200 / 1800 s linear window from 5000 / 7500 / 9000 bps; airdropTokens = supply x airdropBps / 10000 is held off the curve and never sold"},{"name":"CurveBuy","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveBuy(address,address,uint256,uint256,uint256,uint256)","solidity":"event CurveBuy(address indexed buyer, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 fee, uint256 tax)","topic0":"0xec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc455","indexes":"bb_launch_swaps (pool_id = the curve, is_buy true, amount0 = -quoteIn, amount1 = tokensOut) + bb_launches.curve_raised += quoteIn - fee - tax"},{"name":"CurveSell","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveSell(address,address,uint256,uint256,uint256,uint256)","solidity":"event CurveSell(address indexed seller, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 fee, uint256 tax)","topic0":"0x8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df","indexes":"bb_launch_swaps (is_buy false) + bb_launches.curve_raised -= quoteOut"},{"name":"CurveCompleted","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"CurveCompleted(address,uint256,uint256)","solidity":"event CurveCompleted(address indexed recipient, uint256 quoteOut, uint256 tokenOut)","topic0":"0xf8d37a90738ae063b8b8058b66f5880cf3cf7ab0c5d4fa78219696591dfbfb67","indexes":"not stored: the clearing trade; Graduated follows in the same transaction"},{"name":"Graduated","contract":"CurveFactory","address":"0x0e5676B609CE83DD299A1025D188548764A913e4","emitter":null,"signature":"Graduated(address,bytes32,uint256,address,uint256,uint256,uint256,uint160)","solidity":"event Graduated(address indexed token, bytes32 indexed poolId, uint256 indexed tokenId, address quote, uint256 quoteAmount, uint256 tokenAmount, uint256 tokensBurned, uint160 sqrtPriceX96)","topic0":"0xd4df01b899fd11e56dd1988cc7505f0cb8fcbf6e06af3a4d3ee20936f3529072","indexes":"bb_launches.pool_id / token_id / graduated / hooks + bb_launch_pools (token_is_currency0 by address order) + bb_curve_launches.graduated (phase 3)"},{"name":"AirdropReserved","contract":"CurveFactory","address":"0x0e5676B609CE83DD299A1025D188548764A913e4","emitter":null,"signature":"AirdropReserved(address,address,uint256)","solidity":"event AirdropReserved(address indexed token, address indexed pool, uint256 amount)","topic0":"0xe55be1cdc3273dff1821789e780f247efc390b92c95703b8a1715aecc6435662","indexes":"bb_curve_launches.airdrop_pool (API: airdrop_pool): the reserve landed in its AirdropPool at createGraduatedPool, after Graduated","note":"the pool pays holders pro-rata in the token itself (Rewarded, in launch tokens); its burnTokenLeg is distributor-only and dust-only"},{"name":"PoolRegistered","contract":"CurveHook","address":"0x5214be97Ac1D5F4d86a378A5B75B289f114ba844","emitter":null,"signature":"PoolRegistered(bytes32,address,address,address,uint16,uint16,uint40,uint32,uint16)","solidity":"event PoolRegistered(bytes32 indexed poolId, address indexed token, address indexed quote, address creator, uint16 feeBps, uint16 creatorTaxBps, uint40 openedAt, uint32 snipeWindow, uint16 snipeStartBps)","topic0":"0xbac2eecacb7fe6eb2a802a459146a15156726c2bba844132bf4140f188cc788a","indexes":"bb_curve_launches.pool_opened_at / snipe_window / snipe_start_bps (API: pool_opened_at): the shield's clock starts at openedAt","note":"live: CurveHook.currentBuyChargeBps(poolId) = fee + creator tax + snipe tax on a buy right now; snipeShieldOf(poolId) = (openedAt, window, startBps, endsAt)"},{"name":"FeesSwept","contract":"BondingCurve","address":null,"emitter":"the launch's BondingCurve (CurveLaunched.curve; bb_launches.curve) until it graduates","signature":"FeesSwept(uint256,uint256,uint256)","solidity":"event FeesSwept(uint256 protocolAmount, uint256 creatorAmount, uint256 creatorTax)","topic0":"0x9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f","indexes":"bb_launch_fee_events (kind collected)"},{"name":"Abandoned","contract":"CurveFactory","address":"0x0e5676B609CE83DD299A1025D188548764A913e4","emitter":null,"signature":"Abandoned(address,address,uint256,uint256)","solidity":"event Abandoned(address indexed token, address indexed venue, uint256 refundQuote, uint256 refundSupply)","topic0":"0x56189f752f9a4ea9b583fa556ef1d10e6993eaa22c72ade4f03c9a63c80a5fde","indexes":"bb_curve_launches.phase = 4, refunding, refund_venue, refund_quote, refund_supply + bb_launches.refunding","note":"BondingCurve emits CurveAbandoned(refundQuote, refundSupply, tokensBurned) when the curve itself is the refund venue"},{"name":"Redeemed","contract":"CurveFactory","address":"0x0e5676B609CE83DD299A1025D188548764A913e4","emitter":null,"signature":"Redeemed(address,address,uint256,uint256)","solidity":"event Redeemed(address indexed token, address indexed holder, uint256 tokensIn, uint256 quoteOut)","topic0":"0x5cdf07ad0fc222442720b108e3ed4c4640f0fadc2ab2253e66f259a0fea83480","indexes":"bb_curve_redemptions + bb_curve_launches.redeemed","note":"BondingCurve emits Redeemed(holder, tokensIn, quoteOut) at the curve venue: same table"},{"name":"Swap","contract":"PoolManager (Uniswap v4)","address":"0x28e2Ea090877bF75740558f6BFB36A5ffeE9e9dF","emitter":null,"signature":"Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24)","solidity":"event Swap(bytes32 indexed id, address indexed sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee)","topic0":"0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f","indexes":"bb_launch_swaps (filtered by the launch pool ids: topic1 = poolId) + rolling price / volume / buys / sells on bb_launches and bb_launch_pools","note":"stored in the quote = currency0 convention: a graduated curve pool whose token sorts first has its legs swapped and sqrtPrice inverted (2^192 / sqrtPriceX96)"},{"name":"PoolFeesCollected","contract":"CurveHook","address":"0x5214be97Ac1D5F4d86a378A5B75B289f114ba844","emitter":null,"signature":"PoolFeesCollected(bytes32,address,uint256,uint256,uint256)","solidity":"event PoolFeesCollected(bytes32 indexed poolId, address indexed currency, uint256 protocolAmount, uint256 creatorAmount, uint256 taxAmount)","topic0":"0x68319b9c14504932188cf18fd430081408f4e8cc877910e4772b09e73ba72821","indexes":"bb_launch_fee_events (kind collected) + bb_launches.fees_quote_collected / fees_token_collected"},{"name":"Collected","contract":"LaunchLocker","address":"0x324b59d4705d40527B3C64dA9803f7E80f120F43","emitter":null,"signature":"Collected(uint256,address,uint256,uint256)","solidity":"event Collected(uint256 indexed tokenId, address indexed token, uint256 quoteAmount, uint256 tokenAmount)","topic0":"0xe985bb809569e1ab693b8d0a44015cb780fa698a4b16df55472d8eeffa185b39","indexes":"bb_launch_fee_events (kind collected) + bb_launches.fees_quote_collected / fees_token_collected"},{"name":"Paid","contract":"LaunchLocker","address":"0x324b59d4705d40527B3C64dA9803f7E80f120F43","emitter":null,"signature":"Paid(uint256,address,address,uint256)","solidity":"event Paid(uint256 indexed tokenId, address indexed account, address indexed currency, uint256 amount)","topic0":"0x2a156326ec22774ffa31f45f5f5990405e41eb6fe44e1d600934ab445cf3c0c1","indexes":"bb_launch_fee_events (kind paid; account = the recipient, currency, amount)"},{"name":"Burned","contract":"LaunchLocker","address":"0x324b59d4705d40527B3C64dA9803f7E80f120F43","emitter":null,"signature":"Burned(uint256,address,uint256)","solidity":"event Burned(uint256 indexed tokenId, address indexed currency, uint256 amount)","topic0":"0x7a6396f9141e42bbd82eddb43e30077ef07aaafcd4ee3dfbd6adb1dca8f2445a","indexes":"bb_launch_fee_events (kind burned) + bb_launches.fees_quote_burned / fees_token_burned"},{"name":"ProtocolBurned","contract":"LaunchLocker","address":"0x324b59d4705d40527B3C64dA9803f7E80f120F43","emitter":null,"signature":"ProtocolBurned(uint256,address,uint256)","solidity":"event ProtocolBurned(uint256 indexed tokenId, address indexed token, uint256 amount)","topic0":"0x6bae6d2d751347b78b8b6df28f4237035c84cb589fe6b90dabda8ba05bc1e7c5","indexes":"bb_launch_fee_events (kind protocol_burn): the coin leg of the protocol share, sent to the dead address at collect time"},{"name":"ProtocolBurned","contract":"FeeSplitter (CurveHook, curve locker)","address":null,"emitter":"the CurveHook and the CurveFactory's locker (both FeeSplitters)","signature":"ProtocolBurned(address,uint256)","solidity":"event ProtocolBurned(address indexed token, uint256 amount)","topic0":"0xdd67fcf03eff90a877db609aef3742829b09597a5a304114ec25dc0f271fb14d","indexes":"bb_launch_fee_events (kind protocol_burn) for graduated curve pools"},{"name":"Credited","contract":"LaunchLocker","address":"0x324b59d4705d40527B3C64dA9803f7E80f120F43","emitter":null,"signature":"Credited(address,address,uint256)","solidity":"event Credited(address indexed account, address indexed currency, uint256 amount)","topic0":"0x4e45da441832cf53bdaa69235704fc0575e68210f459ee1562911024b12967d5","indexes":"bb_launch_fee_events (kind credited): a recipient that could not receive was credited; claim(currency) pays it later"},{"name":"Claimed","contract":"LaunchLocker","address":"0x324b59d4705d40527B3C64dA9803f7E80f120F43","emitter":null,"signature":"Claimed(address,address,uint256)","solidity":"event Claimed(address indexed account, address indexed currency, uint256 amount)","topic0":"0xf7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683","indexes":"bb_launch_fee_events (kind claimed)"},{"name":"Distributed","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"Distributed(uint256,uint256,uint256)","solidity":"event Distributed(uint256 indexed round, uint256 holders, uint256 amount)","topic0":"0xc5d35a65af09b3042394b742529d10f7fbf9a37294d6b13e4d63d06f9909a15b","indexes":"not stored: the sum of a round's Rewarded rows"},{"name":"Rewarded","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"Rewarded(uint256,address,uint256)","solidity":"event Rewarded(uint256 indexed round, address indexed holder, uint256 amount)","topic0":"0x6d46424d7308d93179bbc5c8c01e098e8353dad13aff9809fd8a881a69feaa3a","indexes":"bb_rewards (holder, round, amount in the quote asset)"},{"name":"TokenLegBurned","contract":"RewardPool","address":null,"emitter":"the launch's RewardPool (RewardPoolCreated.pool; bb_launches.reward_pool)","signature":"TokenLegBurned(uint256)","solidity":"event TokenLegBurned(uint256 amount)","topic0":"0x76a36c38271909275ee6eecb21d4449967c6cfcf8548fd5e1b5aeb5ed5952fe3","indexes":"bb_rewards (holder = 0x000000000000000000000000000000000000dead, round 0, amount in launch tokens)"},{"name":"Rewarded","contract":"AirdropPool","address":null,"emitter":"the launch's AirdropPool (AirdropReserved.pool; bb_curve_launches.airdrop_pool), a RewardPool quoted in the token itself","signature":"Rewarded(uint256,address,uint256)","solidity":"event Rewarded(uint256 indexed round, address indexed holder, uint256 amount)","topic0":"0x6d46424d7308d93179bbc5c8c01e098e8353dad13aff9809fd8a881a69feaa3a","indexes":"not stored: read totalDistributed() / rounds() on the pool; amounts are in the launch token (the pot IS the airdrop)"},{"name":"TokenLegBurned","contract":"AirdropPool","address":null,"emitter":"the launch's AirdropPool (AirdropReserved.pool; bb_curve_launches.airdrop_pool), a RewardPool quoted in the token itself","signature":"TokenLegBurned(uint256)","solidity":"event TokenLegBurned(uint256 amount)","topic0":"0x76a36c38271909275ee6eecb21d4449967c6cfcf8548fd5e1b5aeb5ed5952fe3","indexes":"not stored: the dust the distributor burned once the pot was under BURN_DUST_BPS of what it had paid out"},{"name":"Split","contract":"FeeRouter","address":"0xd06e0accc1EA626E98b8A8ad4D44ec405C2f1DB6","emitter":null,"signature":"Split(address,uint256,uint256)","solidity":"event Split(address indexed currency, uint256 treasuryAmount, uint256 payeeAmount)","topic0":"0x5d95162205dc900555172b9649799b0334d5c456a8c9d875524229cd73416d4b","indexes":"bb_fee_splits (treasury_amount to the cold wallet, payee_amount to the FeeRouter's payee); Forwarded fires once per leg and is not stored"},{"name":"VaultDeployed","contract":"SocialVaultFactory","address":"0xCAe11577F88d7bF8E4fb1DDB241556f008C32F25","emitter":null,"signature":"VaultDeployed(bytes32,address,uint8,string)","solidity":"event VaultDeployed(bytes32 indexed handleHash, address indexed vault, uint8 indexed platformId, string handle)","topic0":"0xe36f96a5cc2b2ec9aafd9e3a53a704b0f022615e6a1b1ecc1913f0f523199970","indexes":"bb_x_vaults (handle_hash, handle, vault; the hash is keccak256(abi.encode(platformId, handle)))"},{"name":"Claimed","contract":"SocialVaultFactory","address":"0xCAe11577F88d7bF8E4fb1DDB241556f008C32F25","emitter":null,"signature":"Claimed(bytes32,address,address,address[],uint256[])","solidity":"event Claimed(bytes32 indexed handleHash, address indexed vault, address indexed to, address[] currencies, uint256[] amounts)","topic0":"0x95eecace84751e43183c30db83463452f4095af434d7128cb70691dd04fd7ef5","indexes":"bb_x_claims (vault, to_addr, currencies[], amounts[])"},{"name":"HandleBound","contract":"SocialVaultFactory","address":"0xCAe11577F88d7bF8E4fb1DDB241556f008C32F25","emitter":null,"signature":"HandleBound(bytes32,bytes32,uint8)","solidity":"event HandleBound(bytes32 indexed handleHash, bytes32 indexed userId, uint8 indexed platformId)","topic0":"0x089eb62e5e28daea29ada5ebaf37a1ec65094320080f3d150db33213aec31438","indexes":"bb_x_events (kind handle_bound: handle_hash, x_user_id = the bound account id)"},{"name":"VaultDeployed","contract":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","emitter":null,"signature":"VaultDeployed(bytes32,address,string)","solidity":"event VaultDeployed(bytes32 indexed handleHash, address indexed vault, string handle)","topic0":"0xc3d0e1e209e26cc94d58bd9d7cc2c68f49a275898e447d9034534ec19f265029","indexes":"bb_x_vaults (handle_hash, handle, vault) — v1, X only, superseded; nothing new pays these vaults"},{"name":"Claimed","contract":"XVaultFactory","address":"0x63306bD73F21fF707738ed383f20ad47757956fb","emitter":null,"signature":"Claimed(bytes32,address,address,address[],uint256[])","solidity":"event Claimed(bytes32 indexed handleHash, address indexed vault, address indexed to, address[] currencies, uint256[] amounts)","topic0":"0x95eecace84751e43183c30db83463452f4095af434d7128cb70691dd04fd7ef5","indexes":"bb_x_claims (vault, to_addr, currencies[], amounts[])"}],"constants":{"bps":10000,"feeSplit":{"protocolBps":3000,"creatorBps":7000,"protocolPct":30,"creatorPct":70},"protocolSplit":{"treasuryBps":5000,"payeeBps":5000,"payeeSharePctOfFee":15,"payee":"FeeRouter.payee(), a second protocol wallet","treasurySharePctOfFee":15,"timelockHours":24},"lpFee":{"minPips":10000,"maxPips":30000,"presetsPips":[10000,20000,30000],"note":"pips: 10000 = 1%"},"pool":{"tickSpacing":200,"quoteIsCurrency0":"always on LaunchFactory / ListingFactory pools; by address order on graduated curve pools (see bb_launch_pools.token_is_currency0)","defaultSupply":"1000000000000000000000000000","maxPools":4,"maxRecipients":7,"maxQuoteDecimals":18,"native":"0x0000000000000000000000000000000000000000","dead":"0x000000000000000000000000000000000000dEaD"},"curve":{"minFeeBps":100,"maxFeeBps":300,"maxCreatorTaxBps":1000,"maxTotalTradeFeeBps":2000,"abandonDelayS":259200,"phases":{"none":0,"trading":1,"swept":2,"graduated":3,"refunding":4}},"snipeTax":{"startBps":9900,"windowS":5,"schedule":[{"secondsSinceOpen":0,"bps":9900},{"secondsSinceOpen":1,"bps":1720},{"secondsSinceOpen":2,"bps":298},{"secondsSinceOpen":3,"bps":51},{"secondsSinceOpen":4,"bps":9},{"secondsSinceOpen":5,"bps":0}],"note":"the legacy shield; LaunchParams 0 / 0 selects it"},"snipeShield":{"legacy":{"windowS":5,"startBps":9900},"longWindowsS":[600,1200,1800],"longStartsBps":[5000,7500,9000],"note":"every (window, start) pair of the two lists is allowed; the long windows decay linearly"},"airdrop":{"optionsBps":[0,500,1000,1500]},"feeWarning":{"amberBps":500,"redBps":1000,"note":"per side = lpFee / 100 + creator_tax_bps; the site turns amber / red from these"},"votes":{"durationH":72,"weight":"min(balance when voting, balance when the vote closed), from the holder index","advisory":true},"formulas":{"directTokensPerQuote":"tokensPerQuote = (sqrtPriceX96 / 2^96)^2 * 10^(quoteDecimals - 18)","directQuotePerToken":"priceQuote = 1 / tokensPerQuote","directFromTick":"tokensPerQuote = 1.0001^tick * 10^(quoteDecimals - 18)","marketCap":"fdvQuote = priceQuote * supply / 1e18 (market cap = FDV: the whole supply is in the pool or in wallets, nothing is reserved); usd = fdvQuote * quoteUsd","tokenIsCurrency0":"when bb_launch_pools.token_is_currency0 (a graduated curve pool whose token sorts below its quote) use sqrtPriceX96' = 2^192 / sqrtPriceX96 and negate amounts; the API already returns the normalised form","curveReserves":"quoteReserve = phantomQuote + curveRaised; tokenReserve = supply - tokensSold (BondingCurve.getReserves())","curvePrice":"priceQuoteRaw = quoteReserve / tokenReserve (raw units); priceQuote = priceQuoteRaw * 10^(18 - quoteDecimals)","curveBuy":"tokensOut = (quoteIn - fee - tax) * tokenReserve / (quoteReserve + quoteIn - fee - tax); fee = quoteIn * feeBps / 10000; tax = quoteIn * creatorTaxBps / 10000","curveProgress":"progress = min(1, curveRaised / graduationThreshold)","curveGraduation":"graduates when curveRaised >= graduationThreshold, i.e. tokenReserve == reserved = supply * phantomQuote / (phantomQuote + graduationThreshold)","curveGraduationFdv":"fdvRawAtGraduation = (phantomQuote + graduationThreshold)^2 / phantomQuote","curvePoolTokens":"poolTokens = reserved * graduationThreshold / (phantomQuote + graduationThreshold); the rest of the reserve is burned at graduation","snipeTax":"legacy shield (snipe_window 5, snipe_start_bps 9900): taxBps(t) = 9900 * e^(-1.75 * floor(t)) for t < 5 s after the graduated pool opened, 0 after; long shields (snipe_window 600 | 1200 | 1800 s, snipe_start_bps 5000 | 7500 | 9000): taxBps(t) = start * (window - floor(t)) / window; charged on buys only, on top of fee + creator tax, total capped at 9900; t counts from pool_opened_at (PoolRegistered.openedAt)","buyCharge":"what a buy pays right now = CurveHook.currentBuyChargeBps(poolId) (fee + creator tax + snipe tax, bps of the output leg); sells pay fee + creator tax only","roundTripLoss":"per side s = lpFee (pips / 100) + creator_tax_bps; a buy followed by a sell keeps (1 - s)^2: loss = 1 - (1 - s)^2 (13% per side -> ~24%)","airdrop":"airdropTokens = supply * airdrop_bps / 10000 sits on the curve outside its maths (curveSupply = supply - airdropTokens: opening FDV, reserved and sellable are computed on curveSupply); at graduation it moves into airdrop_pool and is paid to holders pro-rata by balance; on abandon it is burned (never redeemable)","refund":"quoteOut = refundQuote * tokensIn / refundSupply (rounded down) at refund_venue while phase == 4"}}}},"apis":[{"method":"GET","path":"/api/launch/list","url":"https://nasdegen.fun/api/launch/list","summary":"Browse launches","description":"The list every tab of the home page reads. Raw amounts are decimal integer strings in the quote's decimals (`quote_decimals`); `price_quote` / `fdv_quote` are numbers in the quote asset; `*_usd` fields are null when the quote has no price.","params":[{"name":"chain","in":"query","description":"one chain; omitted = every chain","schema":{"type":"string","enum":["base","robinhood","bnb"]}},{"name":"sort","in":"query","description":"live (outside-wallet activity first; trending is an alias), new, mcap, volume, gainers, holders","schema":{"type":"string","enum":["live","new","mcap","volume","gainers","holders"]}},{"name":"window","in":"query","description":"the volume window for sort=volume|gainers","schema":{"type":"string","enum":["1h","24h","all"]}},{"name":"filter","in":"query","description":"a facet","schema":{"type":"string","enum":["fee0","burn","usdg","gitlawb","today","stock","holders","platform","parasite","posters"]}},{"name":"limit","in":"query","description":"rows per page, 1..200","schema":{"type":"integer"}},{"name":"offset","in":"query","description":"page offset, up to 100000","schema":{"type":"integer"}},{"name":"quote","in":"query","description":"one exact quote-asset address: every coin paired with it (combine with `chain`)","schema":{"type":"string","format":"address"}},{"name":"format","in":"query","description":"csv = the same rows as text/csv (RFC 4180, CRLF); omitted = JSON","schema":{"type":"string","enum":["json","csv"]}}],"cache":"public, s-maxage=2, stale-while-revalidate=10","example":"https://nasdegen.fun/api/launch/list?chain=base&sort=new&limit=50","response":"{ sort, window, chain, filter, quote, limit, offset, has_more, ethUsd, launches: LaunchRow: { chain, chain_id, token, token_id, launcher (raw on-chain: the LaunchAndBuy router for a router launch), creator (the wallet that launched: use this for display / attribution), quote, quote_key (eth|usdg|stock|custom), quote_symbol, quote_decimals, pool_id, hooks, start_tick, lp_fee (pips), supply (wei string), name, symbol, image_url, description, website, x_handle, telegram (https://t.me/…), tweet_url (https://x.com/<user>/status/<id>), kind (pool|curve|listing), curve, graduated, refunding, graduation_threshold, phantom_quote, creator_tax_bps, curve_raised, snipe_window, snipe_start_bps, airdrop_bps, airdrop_pool, pool_opened_at, pools[] { pool_id, quote, token_is_currency0, sqrt_price_x96, tick, supply_bps }, sqrt_price_x96, tick, price_quote, fdv_quote, quote_usd, price_usd, fdv_usd, volume_quote, volume_1h, volume_24h, volume_usd, buys, sells, trades_1h, trades_24h, traders_1h_ex, traders_24h_ex, holders, last_trade_at, block_time, tx_hash, recipients[], reward_pool, fee_vault, fee_mode, x_recipients[] }[] }. With format=csv: text/csv, one row per launch (chain, chain_id, token, name, symbol, launcher, kind, quote, quote_symbol, quote_decimals, lp_fee_pips, supply, price_quote, price_usd, fdv_quote, fdv_usd, volume_quote, volume_usd, volume_24h_quote, buys, sells, holders, block_time, tx_hash)."},{"method":"GET","path":"/api/launch/live","url":"https://nasdegen.fun/api/launch/live","summary":"One call for a live page","description":"The activity feed, the site totals, the trending strip and (with `sort`) one list page, in one response. The site polls it every ~5 s.","params":[{"name":"chain","in":"query","description":"one chain; omitted = every chain","schema":{"type":"string","enum":["base","robinhood","bnb"]}},{"name":"sort","in":"query","description":"live (outside-wallet activity first; trending is an alias), new, mcap, volume, gainers, holders","schema":{"type":"string","enum":["live","new","mcap","volume","gainers","holders"]}},{"name":"window","in":"query","description":"the volume window for sort=volume|gainers","schema":{"type":"string","enum":["1h","24h","all"]}},{"name":"filter","in":"query","description":"a facet","schema":{"type":"string","enum":["fee0","burn","usdg","gitlawb","today","stock","holders","platform","parasite","posters"]}},{"name":"limit","in":"query","description":"rows per page, 1..200","schema":{"type":"integer"}},{"name":"offset","in":"query","description":"page offset, up to 100000","schema":{"type":"integer"}},{"name":"quote","in":"query","description":"one exact quote-asset address: every coin paired with it (combine with `chain`)","schema":{"type":"string","format":"address"}}],"cache":"public, s-maxage=2, stale-while-revalidate=10","example":"https://nasdegen.fun/api/launch/live?chain=base&sort=live&limit=40","response":"{ at, feed: FeedItem[], totals: { launches, trades, volume_usd, fees_burned_usd, fees_to_creators_usd, usd_partial }, ethUsd, launches: LaunchRow[] | null, has_more, posts, trending: { window, items } }"},{"method":"GET","path":"/api/launch/feed","url":"https://nasdegen.fun/api/launch/feed","summary":"Latest launches and trades","description":"The newest 24 launch and swap events across every chain, newest first.","params":[{"name":"format","in":"query","description":"csv = the same rows as text/csv (RFC 4180, CRLF); omitted = JSON","schema":{"type":"string","enum":["json","csv"]}}],"cache":"public, s-maxage=2, stale-while-revalidate=10","example":"https://nasdegen.fun/api/launch/feed","response":"{ items: ({ kind: 'launch', chain, at, tx_hash, token, name, symbol, launcher, lp_fee, quote_key, quote_symbol, launch_kind, image_url, ... } | { kind: 'swap', chain, at, tx_hash, token, name, symbol, trader, is_buy, is_dev, quote_wei, quote_key, quote_symbol, quote_decimals, usd, image_url })[] }. With format=csv: text/csv, launches and swaps in one flat shape (kind, chain, at, tx_hash, token, name, symbol, trader, is_buy, quote_amount, quote_symbol, quote_decimals, usd)."},{"method":"GET","path":"/api/launch/search","url":"https://nasdegen.fun/api/launch/search","summary":"Search by name, symbol or address","description":"Substring match on name / symbol, exact match on a token address; at most 20 rows.","params":[{"name":"q","in":"query","required":true,"description":"up to 80 characters","schema":{"type":"string"}},{"name":"chain","in":"query","description":"one chain; omitted = every chain","schema":{"type":"string","enum":["base","robinhood","bnb"]}}],"cache":"public, s-maxage=5, stale-while-revalidate=30","example":"https://nasdegen.fun/api/launch/search?q=pepe&chain=base","response":"{ q, launches: LaunchRow[] }"},{"method":"GET","path":"/api/launch/candles","url":"https://nasdegen.fun/api/launch/candles","summary":"OHLCV candles","description":"Sparse whole buckets in quote per token (multiply by `quote.usd` for dollars), at most 2000 including the current bucket; fill gaps from `baseline.price`. `launch.price` is the opening price from the start tick.","params":[{"name":"chain","in":"query","description":"the chain","schema":{"type":"string","enum":["base","robinhood","bnb"]},"required":true},{"name":"token","in":"query","required":true,"description":"the launch token address","schema":{"type":"string","format":"address"}},{"name":"interval","in":"query","description":"default 5m","schema":{"type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"from","in":"query","description":"unix seconds; bounded to the launch time and the bucket cap","schema":{"type":"integer"}},{"name":"wallet","in":"query","description":"also return that wallet's trades as markers (`mine`)","schema":{"type":"string","format":"address"}}],"cache":"public, s-maxage=5, stale-while-revalidate=30","example":"https://nasdegen.fun/api/launch/candles?chain=base&token=0x...&interval=5m","response":"{ interval, from, asOf, baseline: { price, hasPriorTrades }, launch: { t, price }, quote: { symbol, decimals, usd }, supply, candles: { t, open, high, low, close, volume, trades }[], mine }"},{"method":"GET","path":"/api/launch/holders","url":"https://nasdegen.fun/api/launch/holders","summary":"Holder distribution","description":"Top holders, concentration, the creator's position and sniper-window buyers. `synced` is false while the token's transfer history is still being backfilled.","params":[{"name":"chain","in":"query","description":"the chain","schema":{"type":"string","enum":["base","robinhood","bnb"]},"required":true},{"name":"token","in":"query","required":true,"description":"the launch token address","schema":{"type":"string","format":"address"}}],"cache":"no-store (5 s server memo)","example":"https://nasdegen.fun/api/launch/holders?chain=base&token=0x...","response":"{ synced, holders, supply, top: { holder, balance, bps, tag }[], top10Bps, poolBps, creator: { address, bps, bought, sold, sells }, sniper: { wallets, bps }, notes[] }"},{"method":"GET","path":"/api/launch/rewards","url":"https://nasdegen.fun/api/launch/rewards","summary":"Reward-coin payouts","description":"For a launch in the holders fee mode: what its RewardPool has paid out, from the index of Rewarded / TokenLegBurned.","params":[{"name":"chain","in":"query","description":"the chain","schema":{"type":"string","enum":["base","robinhood","bnb"]},"required":true},{"name":"token","in":"query","required":true,"description":"the launch token address","schema":{"type":"string","format":"address"}},{"name":"wallet","in":"query","description":"also total that wallet's payouts (`mine`)","schema":{"type":"string","format":"address"}}],"cache":"no-store (5 s server memo)","example":"https://nasdegen.fun/api/launch/rewards?chain=base&token=0x...","response":"{ total, burned, rounds, holders_paid, last_at, mine }"},{"method":"GET","path":"/api/launch/sisters","url":"https://nasdegen.fun/api/launch/sisters","summary":"Sister-coin candidates","description":"Launches on the chain quoted in the same asset that own a RewardPool or a FeeVault (the FeeVault sister mode picker).","params":[{"name":"chain","in":"query","description":"the chain","schema":{"type":"string","enum":["base","robinhood","bnb"]},"required":true},{"name":"quote","in":"query","required":true,"description":"the quote asset address","schema":{"type":"string","format":"address"}},{"name":"q","in":"query","description":"name / symbol filter","schema":{"type":"string"}}],"cache":"no-store","example":"https://nasdegen.fun/api/launch/sisters?chain=base&quote=0x0000000000000000000000000000000000000000","response":"{ candidates: { token, name, symbol, sister, module, fee_mode, image_url }[] }"},{"method":"GET","path":"/api/public/v1/fees","url":"https://nasdegen.fun/api/public/v1/fees","summary":"Public fee data: totals and per coin","description":"Fees every coin has generated and where they went, from indexed events only: creator wallets, holders (RewardPool), handles (social vaults), posters (PosterPool), fee modules (FeeVault), cross-chain routers, the protocol (FeeRouter), burned (0x…dEaD, the protocol's coin-leg share included), credited and awaiting claim, and curve rows indexed before their split was stored (unattributed). Totals per chain and quote asset across ALL coins (quote legs only: coin legs are different tokens); one page of coins with both legs. Every bucket: { amount | quote + coin, events, txs (its newest tx hashes) }. Solana: fee claims into the treasury multisig by source, in lamports. Raw integer strings, no USD. CORS open; unknown parameters are refused at the edge; a busy database answers 503 + retry-after.","params":[{"name":"chain","in":"query","description":"one chain; omitted = every chain","schema":{"type":"string","enum":["base","robinhood","bnb"]}},{"name":"limit","in":"query","description":"coins per page, 1..200 (default 50)","schema":{"type":"integer"}},{"name":"offset","in":"query","description":"page offset","schema":{"type":"integer"}}],"cache":"public, s-maxage=60, stale-while-revalidate=300","example":"https://nasdegen.fun/api/public/v1/fees?chain=base&limit=50","response":"{ version, generated_at, chain, limit, offset, has_more, totals: { chain, quote, quote_symbol, quote_decimals, coins, generated, to: { creator, holders, handles, posters, modules, xchain, protocol, burn, credited, unattributed }, posters_paid_out }[], coins: CoinFees[], solana: { by_source: { source, amount, events, txs }[], asset, note, coins } | null }"},{"method":"GET","path":"/api/public/v1/fees/{chain}/{token}","url":"https://nasdegen.fun/api/public/v1/fees/{chain}/{token}","summary":"Public fee data: one coin, event by event","description":"One coin's fee breakdown (generated; to creator / holders / handles / posters / modules / xchain / protocol / burn / credited / unattributed; protocol_coin_burned; posters_paid_out; summary { creator_side, protocol, burned, pending_claim, unattributed }; reconciled per leg) and its fee events newest first, each with tx_hash and log_index. chain = solana takes a mint and returns that coin's treasury claims by source.","params":[{"name":"chain","in":"path","required":true,"description":"base | robinhood | bnb | solana","schema":{"type":"string","enum":["base","robinhood","bnb","solana"]}},{"name":"token","in":"path","required":true,"description":"the coin (0x address, or a Solana mint)","schema":{"type":"string"}},{"name":"limit","in":"query","description":"events per page, 1..200 (default 100)","schema":{"type":"integer"}},{"name":"offset","in":"query","description":"events offset","schema":{"type":"integer"}}],"cache":"public, s-maxage=60, stale-while-revalidate=300","example":"https://nasdegen.fun/api/public/v1/fees/base/0x...","response":"{ version, generated_at, chain, token, name, symbol, kind, quote: { address, symbol, decimals }, coin: { symbol, decimals }, fees: { generated, to, protocol_coin_burned, posters_paid_out, summary, reconciled, last_at }, events: { kind, category, tx_hash, log_index, block_number, block_time, currency, account, amount, quote_amount, token_amount, protocol_amount, creator_amount, tax_amount }[], limit, offset, has_more }"},{"method":"GET","path":"/api/launch/meta/{token}","url":"https://nasdegen.fun/api/launch/meta/{token}","summary":"Token metadata by address","description":"Name, symbol, description, logo and links the creator registered. The logo is a 512x512 WebP on this domain when it was uploaded here, else the https URL the creator gave.","params":[{"name":"token","in":"path","required":true,"description":"the launch token address","schema":{"type":"string","format":"address"}},{"name":"chain","in":"query","description":"one chain; omitted = every chain","schema":{"type":"string","enum":["base","robinhood","bnb"]}}],"cache":"public, max-age=300","example":"https://nasdegen.fun/api/launch/meta/0x...?chain=base","response":"{ name, symbol, description?, image?, external_url?, x?, website?, twitter?, telegram?, tweet?, extensions?: { website?, twitter?, telegram? }, token, x_recipients?: { handle, vault, bps, user_id? }[] }"},{"method":"GET","path":"/api/launch/meta/{launcher}/{key}","url":"https://nasdegen.fun/api/launch/meta/{launcher}/{key}","summary":"Token metadata by its on-chain URI","description":"The form of `metadataURI` written on-chain by Launched / CurveLaunched / Listed: the launcher address and a 32-byte key. Same JSON as the by-address form.","params":[{"name":"launcher","in":"path","required":true,"description":"the launcher wallet","schema":{"type":"string","format":"address"}},{"name":"key","in":"path","required":true,"description":"the 0x-prefixed 32-byte metadata key","schema":{"type":"string"}}],"cache":"public, max-age=300","example":"https://nasdegen.fun/api/launch/meta/0x<launcher>/0x<key>","response":"{ name, symbol, description?, image?, external_url?, x?, website?, twitter?, telegram?, tweet?, extensions?, token, x_recipients? }"},{"method":"GET","path":"/api/vote","url":"https://nasdegen.fun/api/vote","summary":"Advisory holder votes","description":"For a launch with a fee module: the proposals to switch its mode, their tallies (weight = min(balance when voting, balance at close), from the holder index) and, with `wallet`, that wallet's own vote. Advisory only: the creator decides; nothing here changes the fee split.","params":[{"name":"chain","in":"query","description":"the chain","schema":{"type":"string","enum":["base","robinhood","bnb"]},"required":true},{"name":"token","in":"query","required":true,"description":"the launch token address","schema":{"type":"string","format":"address"}},{"name":"wallet","in":"query","description":"also return that wallet's vote and what it may do","schema":{"type":"string","format":"address"}}],"cache":"no-store","example":"https://nasdegen.fun/api/vote?chain=base&token=0x...","response":"{ proposals: { id, chain, token, proposer, mode, sister, title, body, created_at, closes_at, state (open|closed|applied), tally: { for, against, voters }, passed, applied_at, applied_tx, my_choice }[], can_vote, can_propose, open_id }"},{"method":"GET","path":"/api/quotes","url":"https://nasdegen.fun/api/quotes","summary":"Quote assets on a chain","description":"The fixed quotes (ETH; USDG on Robinhood Chain) and the chain's tokenized-stock registry with live USD prices. Only registry addresses are ever labelled stocks.","params":[{"name":"chain","in":"query","description":"the chain","schema":{"type":"string","enum":["base","robinhood","bnb"]},"required":true},{"name":"q","in":"query","description":"a ticker (AAPL) or an address","schema":{"type":"string"}}],"cache":"no-store (30 s server memo)","example":"https://nasdegen.fun/api/quotes?chain=base&q=AAPL","response":"{ fixed: { key, address, symbol, decimals, usd }[], stocks: { key: 'stock', address, symbol, name, decimals, usd, usdAsOf, logo }[] }"},{"method":"GET","path":"/api/quotes/inspect","url":"https://nasdegen.fun/api/quotes/inspect","summary":"Can this ERC-20 be a quote?","description":"On-chain reads, DexScreener depth and (Base) a GoPlus scan for an arbitrary quote coin. Per-IP limit: 30 per minute.","params":[{"name":"chain","in":"query","description":"the chain","schema":{"type":"string","enum":["base","robinhood","bnb"]},"required":true},{"name":"address","in":"query","required":true,"description":"the ERC-20","schema":{"type":"string","format":"address"}}],"cache":"no-store (10 min server cache)","example":"https://nasdegen.fun/api/quotes/inspect?chain=base&address=0x...","response":"{ ok, symbol, name, decimals, usd, liquidityUsd, warnings[], blockers[] }"},{"method":"GET","path":"/api/health","url":"https://nasdegen.fun/api/health","summary":"Index freshness","description":"Database reachability and the indexer cursor per chain (block lag, last run, last error).","params":[],"cache":"no-store","example":"https://nasdegen.fun/api/health","response":"{ ok, alerts[], sync: { cursor_block, head_block, last_run_at, last_error }, chains[] }"},{"method":"GET","path":"/api/integrate/kit.json","url":"https://nasdegen.fun/api/integrate/kit.json","summary":"This kit, machine-readable","description":"Contracts, Uniswap v4 addresses, event signatures and topics, constants, the REST reference and the stream description; versioned.","params":[],"cache":"public, s-maxage=60, stale-while-revalidate=300","example":"https://nasdegen.fun/api/integrate/kit.json","response":"{ version, generatedAt, site, chains: { base, robinhood }, apis[], stream, metadata, brand, solana }"},{"method":"GET","path":"/api/openapi.json","url":"https://nasdegen.fun/api/openapi.json","summary":"OpenAPI 3.1","description":"The public read API, this kit and the stream as an OpenAPI 3.1 document.","params":[],"cache":"public, s-maxage=300, stale-while-revalidate=3600","example":"https://nasdegen.fun/api/openapi.json","response":"OpenAPI 3.1 document"},{"method":"GET","path":"/api/stream","url":"https://nasdegen.fun/api/stream","summary":"Real-time events (SSE)","description":"Server-sent events: new launches, swaps, curve state changes, holder-reward payouts and fee splits as the indexer writes them. Resume with `Last-Event-ID` or `since=`.","params":[{"name":"chain","in":"query","description":"one chain; omitted = every chain","schema":{"type":"string","enum":["base","robinhood","bnb"]}},{"name":"since","in":"query","description":"a cursor from a previous event id, or a moment (unix seconds, unix ms, ISO date; at most 24 h back); omitted = only what happens next","schema":{"type":"string"}}],"cache":"no-store","example":"https://nasdegen.fun/api/stream?chain=base","response":"text/event-stream","contentType":"text/event-stream"}],"rateLimits":{"reads":"no API key; cached reads answer 503 + retry-after: 2 when the database is busy (keep your last data, retry); unknown query parameters are refused with 400 at the edge; poll modestly and back off on errors","inspect":"/api/quotes/inspect: 30 per IP per minute","stream":"one connection per consumer; the server closes at ~290 s, reconnect with Last-Event-ID"},"stream":{"url":"https://nasdegen.fun/api/stream","protocol":"text/event-stream","query":{"chain":"optional: base | robinhood | bnb","since":"optional: a cursor (an earlier event id) or a moment (unix s, unix ms, ISO); omitted = the head"},"resume":"send the last event id as the Last-Event-ID header (EventSource does this itself) or as ?since=; ids are cursors, so any id resumes exactly after itself","cursor":{"format":"v1.<launch>.<swap>.<curve>.<reward>.<burn>.<split>","meaning":"one insertion-sequence position per table; never a block number or a block time"},"events":[{"event":"ready","data":"{ cursor, chain, poll_ms, publish_lag_s, lifetime_s, page_limit } once per connection; its id is the resolved start cursor"},{"event":"launch","data":"a new bb_launches row: { chain, chain_id, token, token_id, launcher, creator, quote, pool_id, kind, curve, hooks, start_tick, lp_fee, supply, name, symbol, metadata_uri, reward_pool, fee_vault, block_number, block_time, tx_hash, log_index }"},{"event":"swap","data":"a new bb_launch_swaps row (quote = currency0 convention): { chain, chain_id, token, pool_id, trader, is_buy, amount0, amount1, sqrt_price_x96, tick, block_number, block_time, tx_hash, log_index }"},{"event":"curve","data":"a bb_curve_launches row was inserted or changed (graduation, sweep, refund, redemption): { chain, chain_id, token, curve, pool_id, phase, graduated, refunding, refund_venue, refund_quote, refund_supply, redeemed, abandoned_at, updated_at }"},{"event":"reward","data":"a bb_rewards row: { chain, chain_id, token, pool, round, holder, amount, block_number, block_time, tx_hash, log_index }"},{"event":"burn","data":"a bb_burns row: { chain, chain_id, kind, round, currency, amount_in, burned, to, block_number, block_time, tx_hash, log_index }"},{"event":"split","data":"a bb_fee_splits row: { chain, chain_id, currency, treasury_amount, payee_amount, block_number, block_time, tx_hash, log_index }"},{"event":"unavailable","data":"{ reason } then the server closes (no database, or the database is busy): reconnect after `retry`"}],"comment":": ping","timing":{"poll_ms":2000,"ping_ms":15000,"lifetime_s":290,"publish_lag_s":3,"page_limit":200,"since_max_lookback_h":24},"delivery":"at-least-once within a connection; exactly-once across reconnects when the client resumes from the last id it processed. Events arrive after the indexer has written them (the cron polls the chain about once a minute; POST /api/launch/sync?chain=&tx= indexes one transaction at once)."},"metadata":{"onChainUri":"https://nasdegen.fun/api/launch/meta/<launcher>/<key>","byToken":"https://nasdegen.fun/api/launch/meta/<token>?chain=<chain>","shape":{"name":"string","symbol":"string","description":"string?","image":"https URL?","external_url":"https URL?","x":"handle?","website":"https URL?","twitter":"https://x.com/<handle>?","telegram":"https://t.me/<name> | https://t.me/+<invite>?","tweet":"https://x.com/<user>/status/<id>? (the X post announcing the coin)","extensions":"{ website?, twitter?, telegram? }? (token-list style)","token":"address","x_recipients":"{ handle, vault, bps, user_id? }[]?"},"image":"https://nasdegen.fun/api/launch/image/t/<48 hex>.webp: a 512x512 WebP re-encoded here, random immutable key (cache-control: immutable); otherwise the https URL the creator registered. LaunchRow.image_url and FeedItem.image_url carry the same value, so the list endpoints are enough to render logos.","cache":"public, max-age=300; metadata is off-chain and the creator may edit it (signed edits); the token itself never changes"},"brand":{"name":"nasdegen","domain":"nasdegen.fun","tagline":"Launch a coin paired with a stock, a coin or the chain's own. On Base, Robinhood Chain, BNB Chain and Solana.","token":"NASDEGEN","x":"https://x.com/nasdegen","contact":"@nasdegen on X","assets":[{"path":"/brand/bull.jpg","type":"image/jpeg","size":"512x512","note":"the chrome bull, square on black: avatars and large tiles","url":"https://nasdegen.fun/brand/bull.jpg"},{"path":"/brand/mark.svg","type":"image/svg+xml","size":"64x64 raster in an SVG wrapper","note":"the same bull with rounded corners, for anything that asks for an SVG","url":"https://nasdegen.fun/brand/mark.svg"},{"path":"/brand/mark-512.png","type":"image/png","size":"512x512","note":"for listings and tiles","url":"https://nasdegen.fun/brand/mark-512.png"},{"path":"/brand/mark-180.png","type":"image/png","size":"180x180","url":"https://nasdegen.fun/brand/mark-180.png"},{"path":"/brand/mark-64.png","type":"image/png","size":"64x64","url":"https://nasdegen.fun/brand/mark-64.png"},{"path":"/brand/mark-32.png","type":"image/png","size":"32x32","note":"favicon size","url":"https://nasdegen.fun/brand/mark-32.png"},{"path":"/favicon.svg","type":"image/svg+xml","size":"vector","note":"the site icon","url":"https://nasdegen.fun/favicon.svg"},{"path":"/icon.png","type":"image/png","size":"512x512","url":"https://nasdegen.fun/icon.png"},{"path":"/apple-icon.png","type":"image/png","size":"180x180","url":"https://nasdegen.fun/apple-icon.png"},{"path":"/opengraph-image","type":"image/png","size":"1200x630","note":"the site card","url":"https://nasdegen.fun/opengraph-image"}],"colors":{"mint":"#34D3A6","ink":"#0B0F0E"}},"solana":{"status":"live","venue":"Meteora Dynamic Bonding Curve (DBC)","partnerConfig":"7ehAFn91xgYPgwRBiQi6TAbPgrkJKB61XkiLGq3Kv5xR","partnerConfigs":[{"quote":"So11111111111111111111111111111111111111112","symbol":"SOL","decimals":9,"config":"7ehAFn91xgYPgwRBiQi6TAbPgrkJKB61XkiLGq3Kv5xR"},{"quote":"XsbEhLAtcf6HdfpFZ5xEMdqW8nfAvcsP5bdudRLJzJp","symbol":"AAPLx","decimals":8,"config":"GbUeiVP77naQzV51aCtvMDbRmJXHE4jMTr5CXEfXm7dR"},{"quote":"AMC1qwR9KhiyrQBRPrxnfo4JfMeMZqEBvt5tgTytNNoc","symbol":"AMC","decimals":6,"config":"9k6PzCLgUuxgKyW7D6yBNwZPczpnbH75yvLSVrBLmtwn"},{"quote":"AMD8XwJXgQ9WV45Wyj9yFLejxzf2J6VM1PJY8bJEjeES","symbol":"AMD","decimals":6,"config":"A1B99ZbGJa4iHxsCUhtWbwUXgmGWhJQFqeBU2X2HKyNG"},{"quote":"XsXcJ6GZ9kVnjqGsjBnktRcuwMBmvKWh8S93RefZ1rF","symbol":"AMDx","decimals":8,"config":"55QiJ8VmetkuqFHATyhP1q7L1bNyddauLxYjJzjMktd5"},{"quote":"Xs3eBt7uRfJX8QUs4suhyU8p2M6DoUDrJyWBa8LLZsg","symbol":"AMZNx","decimals":8,"config":"5G1X77gmyT62gVp3CmkAiErrebxqKc3gqbX8T9iw6fiK"},{"quote":"ARMbSB1MBRQrY6PNMao1HdQ431VafC6JRJCsGZ2Yv3iJ","symbol":"ARM","decimals":6,"config":"2wMudRfdEW9aBpkV52mJ2djoUaomMRyFQo1CSBaJGUpV"},{"quote":"XsgSaSvNSqLTtFuyWPBhK9196Xb9Bbdyjj4fH3cPJGo","symbol":"AVGOx","decimals":8,"config":"HEV2NJv6ZXs72tH875iwj5E6d9525a7ooAtTgYsUGvBV"},{"quote":"BArimz1PcKZr8PcPh3tcZ2dg4S7FJLk3cw6R5F8GsHKg","symbol":"BA","decimals":6,"config":"CeSt7PkwESa9G6RcNYCYXvtvTnMTVnJEih5THX3eM6bV"},{"quote":"BABANGA4JE7Kkam4nTrALAwAVgsNJUuFJnnkF7S16BZp","symbol":"BABA","decimals":6,"config":"2jsSCEVWJmY5UHNU1ZCmeFh2QAjPaCorcm7GBMor4Wwv"},{"quote":"BBosJLw8ZzoATiEyywiifx7AgmrD2Cm3XjFWbhbRhChy","symbol":"BB","decimals":6,"config":"BkFARHVyfUnGYXxK5Jr6fWFjxTR7rViC8MK55LDPTqJS"},{"quote":"BoTx8y9ynfdxf5ZjWtCoBVkff52qKA82ysaLU8ZM6d8T","symbol":"BOT","decimals":6,"config":"4Wjvmeh1REFaGa2RUpgXzdwegJoazTNUfwp4ehbAHo4q"},{"quote":"Xs6B6zawENwAbWVi7w92rjazLuAr5Az59qgWKcNb45x","symbol":"BRK.Bx","decimals":8,"config":"3ojza6fCRLKHdCWyLgU9wY5ZJagseYyVepTFCBhZszqw"},{"quote":"BRVaZKg6J9iF2BEsdpsxJ9NyvN9PPxPZuoQUX2v8qqkk","symbol":"BROS","decimals":6,"config":"7rp6UVRxbGKVEEGy3ikYdZka3tw7HxUgtZpPd1FHus7g"},{"quote":"BULL151gUXcFV5wXEUqu9Am2L7Qt4bTJRLRuAUjkcspC","symbol":"BULL","decimals":6,"config":"GCpuoTMAjmmuBgF1u8nUGgbHxRmi4gon9vfj7redX84A"},{"quote":"Xs7ZdzSHLU9ftNJsii5fCeJhoRWSC32SQGzGQtePxNu","symbol":"COINx","decimals":8,"config":"3AUiFgysyAzVdfFnhBi4qz7izdTWMvLVSSoH6p7AGCVW"},{"quote":"CzLTZppPdZtTjyq3WGpHLstoc3GLhu7zH5Zg6xUa6Gv5","symbol":"COPX","decimals":6,"config":"5xZ5uX9fPh3Qu4ETvx6hhEpsWEKh5ZDvVqNuurDbVo5H"},{"quote":"CZEB3WNZuF2Yz1z2H81RcCk8T7fsw82KB33zqamASVsg","symbol":"COST","decimals":6,"config":"ETmNGXBfDLNpRYPAwzMaEYEczoNYAc8PLP8AQ4v4x16X"},{"quote":"XsueG8BtpquVJX9LVLLEGuViXUungE6WmK5YZ3p3bd1","symbol":"CRCLx","decimals":8,"config":"5YiKpChebtwkcWDzJJyPCN5vQHnGDj86qL37Hd1Ha38x"},{"quote":"CRWVJeR2yEZuDUKYfGuKCHvLz8ywn4LGvovHfy5WiFmi","symbol":"CRWV","decimals":6,"config":"F5JY3nJ3gC2xXoxGhJTuPswgPUpvNb876jpGQkt5uwez"},{"quote":"CYPHuMmCL1GxJWa2tsPhLKykC7GrHJTCHwbXD4g5uawK","symbol":"CYPH","decimals":6,"config":"9jtuCQUkTVw1incawhwvPuWW2nT9FLdZtkCUGNh45omt"},{"quote":"DELL2aRKQz7DMq5DrKLtkn47ZCnbxXPZXrSGbkmd13wy","symbol":"DELL","decimals":6,"config":"HaehzbT1YwjQiDQHbBUqHHUxDmnRYjfNVmK29vpoJhtq"},{"quote":"Xs2yquAgsHByNzx68WJC55WHjHBvG9JsMB7CWjTLyPy","symbol":"DFDVx","decimals":8,"config":"DGkdKVLWTY8EzoT52y8jAJ7HCk7fdXMGUBU2GHMdHsFq"},{"quote":"DJTu7vi8norVzdVAffgvb39VP7wjKeTsgaMBJrzfxvoF","symbol":"DJT","decimals":6,"config":"HzMB4kMAHyvVsDRgLeYSEb5VEf1ycBFpdXditZ9LunrA"},{"quote":"DKNGQFNGQmoBdXSRGKJ8tTu7uPDasw5JDcfMmWniNfow","symbol":"DKNG","decimals":6,"config":"EHvdAi4Nzn2RKTssRkFDzQ21J9TezBRfVhjytBZY8FHY"},{"quote":"DNUTsCvKbKwu2RM72cUuW3TD9YpzArzACcqYQssjPLSk","symbol":"DNUT","decimals":6,"config":"66Ek5VkjUSFKhhUKracUdYMfhGCTJWBYUcRLAXvCpn2Y"},{"quote":"DRAMjSWR7HRfJKjRkvQWYL2bcaejaVhuxEcjf4pAY4Cw","symbol":"DRAM","decimals":6,"config":"B8Hc4ab8hsD2ZTtTRJArBDtioUBqHXaggiizQSa5weHh"},{"quote":"EWY4owSJYMpwN33qGDu5gGxpkQkpMJu8ZUsQJaNZG5dv","symbol":"EWY","decimals":6,"config":"CikZ18jhraeh8p4FUfsThnsDK4oTjbHn53d6ShnQzqYv"},{"quote":"FLWSojG1gB5VStYR3Sb4nQFRt43UBYkqih1j2CpVLqgd","symbol":"FLWS","decimals":6,"config":"EWtawFwrHXw1SAZdYT6FL6Kca3m75zq7M4WtBZm1rzhC"},{"quote":"FLYRq3en8r2Z69gN3KyAnDrvnitEJNkwPYY7favinHeD","symbol":"FLY","decimals":6,"config":"4v3feB6EeLa1kznKqaiZxJ8hgFXwvigVTfwtWLWPTTaJ"},{"quote":"FWDtiB5fXHdVAewPqvHPL2dh4aBC1C6GacQbePoQXKjz","symbol":"FWDI","decimals":6,"config":"C1HpbizWjzs1K5NMcQ9jUbE3cqZkQCKFFC4Yf6FZnKJw"},{"quote":"Xsv9hRk1z5ystj9MhnA7Lq4vjSsLwzL2nxrwmwtD3re","symbol":"GLDx","decimals":8,"config":"F8qQrVnW6JbVv9fTc2qngZkT1UujL89cDwsJRhTiSBvz"},{"quote":"Xsf9mBktVB9BSU5kf4nHxPq5hCBJ2j2ui3ecFGxPRGc","symbol":"GMEx","decimals":8,"config":"3QuPipg9Tyhwgug3mMLCMcF6Qh5AJkPxzZQcr2gy5sPu"},{"quote":"XsCPL9dNWBMvFtTmwcCA5v3xWPSMEBCszbQdiLLq6aN","symbol":"GOOGLx","decimals":8,"config":"6xDretBvDiqrrQ1H15AU9jF67PcSvPEJ5i29uVMewf7n"},{"quote":"GPRR2u6NS5yBQHWGauoJ9HXgjrTH8dDsrBfTV5zAYvDH","symbol":"GPRO","decimals":6,"config":"7JeFYCksszFtt1puuh5XF5PhWKf1StAo8yBxno5gSPGo"},{"quote":"GRNDYDpqwpCm6jVxpbh4xT5AM4r3p391qYsKTHqgaET2","symbol":"GRND","decimals":6,"config":"2athFeFh9U1cw3VNyp5WX2HZoohJyDwmmy9Em2oqMsRe"},{"quote":"HiMSSzzwkZkrXJ4PGVJRdtfLaANeAztjjcgk5Dxe7Lwx","symbol":"HIMS","decimals":6,"config":"8zE6mTU4vE9yGtUWanwEdAxfdAoTMUxjS8UVryt4erHw"},{"quote":"HooDYv5RewLRiMLnEVq3VJqdqxhuE6c5eYvqejMC3e9A","symbol":"HOOD","decimals":6,"config":"7jqVkk3EkeB9Ub5ajKrm7CDBm7zfQCzf61RvKLgof817"},{"quote":"XsvNBAYkrDRNhA7wPHQfX3ZUXZyZLdnCQDfHZ56bzpg","symbol":"HOODx","decimals":8,"config":"6J3PheKzqkhfjgmmrdaXgQdcnbYaaKmjmrKAhuSiyJG7"},{"quote":"HTZsLG4zqaNvWMwXSLHH3GG5KyJpKwpBRsKVdMG6hvzP","symbol":"HTZ","decimals":6,"config":"8xPqTxTTqz4FqTvjNkmtVn5vDwrWakXFHGH78GPtzH8n"},{"quote":"BMKdM4yUxX12moFqVk195k7coMbaybd4RUKCUdm7D1Sk","symbol":"IBM","decimals":6,"config":"AG6FykvzS6MuFyYhydGgMCiHzXaJeAC6JZoNaisWhjUo"},{"quote":"iNTCy1qTsUEZQe3DSocLz1ZXXai34Gdw8THQh5rxFaF","symbol":"INTC","decimals":6,"config":"8doiZF8cFn6HVhN9PwMxo4EVFBJU5kzkC6apZHrwY4EZ"},{"quote":"XshPgPdXFRWB8tP1j82rebb2Q9rPgGX37RuqzohmArM","symbol":"INTCx","decimals":8,"config":"9CGUjGZNZbPzkHy97C7MsXXt2kDMFvDKov9pHZKMLKTe"},{"quote":"NQ5hSuXQZrbnrwcDVk2qN73njjd3E3v3badYHnj5thF","symbol":"IONQ","decimals":6,"config":"9KndMDPnUj7quVLB5Hycqswgi8aMRD6yzD9jMC24qrg4"},{"quote":"RENzhrJQgmAnfcLhU1U5XwAMc6TC15UA6jCbPBaasnj","symbol":"IREN","decimals":6,"config":"myvHkPZugtkeYzNpYubJiuk8b9TNYjCz7zhGSyGMJo4"},{"quote":"JNJg1znKdF712Phe7L7z52AATAvEjEytBdN2w8Lnh1Y","symbol":"JNJ","decimals":6,"config":"ALwZFbfbC4tAbQGykLWqmzEFQ9dteyqoXUt93DjmnM28"},{"quote":"XsaBXg8dU5cPM6ehmVctMkVqoiRG2ZjMo1cyBJ3AykQ","symbol":"KOx","decimals":8,"config":"A8TXHBkWwa4j9Y88jY6mu39jDErK9NzduBVhQTVFHSuH"},{"quote":"LLYuwZ33keFihgwoxXsBawy31AiRFLFSva32TYq5TvD","symbol":"LLY","decimals":6,"config":"5bsdUVixUbai3eAm9owtfvviHk4cqZ1RdELtFr4J4BHB"},{"quote":"LMT3i1BHgixFqPUgcyteJhnEz2dpy9i3cYy4pi9BoeV","symbol":"LMT","decimals":6,"config":"3sz4474VdJUygp8nVTAqbRCAR2YefBp41k9j1G5M66Z6"},{"quote":"LULUmT9VMttkfAJE236LXJcYJ2tTP7nunrSWR5G1BdS","symbol":"LULU","decimals":6,"config":"AQotLToEtksnV7kCnbybYj1FrJMuEteqZjJFGVg61d28"},{"quote":"LUV9GB51PNZNRyzzyYK3rtqFfvDvWtRiXZ34wVq2HrX","symbol":"LUV","decimals":6,"config":"DkoXXkkcV68DwL7Q36NsK74CgvFdQu7ZHd1FSsqki4mC"},{"quote":"XsqE9cRRpzxcGKDXj1BJ7Xmg4GRhZoyY1KpmGSxAWT2","symbol":"MCDx","decimals":8,"config":"D3kmQn4pDUvaXpVB5cRjv8uT6bMYcGUVNycLBK3djNnv"},{"quote":"Xsa62P5mvPszXL1krVUnU5ar38bBSVcWAB6fmPCo5Zu","symbol":"METAx","decimals":8,"config":"Fub35Nj5PCbF5QAwyTcxPAhAvHwTsESVcfrxomsjVLiW"},{"quote":"MGMuubtUEirmkhfEQdmGUh4pr7HuUdMWcZXFtpPbVJD","symbol":"MGM","decimals":6,"config":"8L1YqrvgpStidxBsxWftYdkZs49fxrkmLxexYk7tXbWD"},{"quote":"MRNAzXzhNcaEXJPibHEn8cd4vyekCDiivTyEwswLUCT","symbol":"MRNA","decimals":6,"config":"4833HFRRLTpaqYj8gL6911i938t6TWESVZJx1H5Au9eb"},{"quote":"MRVLSjkR2ceUBukujaD3xCyHP1H3B2SzpsNTZF546jo","symbol":"MRVL","decimals":6,"config":"ExhHscTrtGfxmQiZzFZ5CrbNJxEgZ9QMxwnfDvYPNC32"},{"quote":"XspzcW1PRtgf6Wj92HCiZdjzKCyFekVD8P5Ueh3dRMX","symbol":"MSFTx","decimals":8,"config":"EHtYWMhUyd98BcPgafDTk97BP6rYCnqhnPZXhCK1DjFs"},{"quote":"MSTRdWXMeZxdE8osAQy3fA4rvTY5rgummDSMEx6U7Nz","symbol":"MSTR","decimals":6,"config":"136CYfjkSkVFoo6tgjnrryVdBxdiNtmAmcJtQesqmG3D"},{"quote":"XsP7xzNPvEHS1m6qfanPUGjNmdnmsLKEoNAnHjdxxyZ","symbol":"MSTRx","decimals":8,"config":"BNus5twQyFPFsVeX9PCjzhUYUZexSoqUvBMRXmnt5v2m"},{"quote":"MUxEsUKSMACyw5fZf68wxf5FLnZVhtU9CwH8uNNGay1","symbol":"MU","decimals":6,"config":"F6ihMTXZAHStZ4CRLteRiAp89JRAc2GBKynFzLbQ5gSV"},{"quote":"NBiSF3UaVUFtRzHwAfxyHsBCAZWGEKnMpewAE4oh7BG","symbol":"NBIS","decimals":6,"config":"6VvQHDJU1gHJC2JaFqvHYACEihjCZU8S8UCBr3e8xkar"},{"quote":"NKEda5nHhNGgjrE9nDdMvaEmkmJ96qqxzBVZEcKmjSg","symbol":"NKE","decimals":6,"config":"GqPqi31os5XXf5f7KHVFHc1FStwGXDd7L4UgVkye2zc1"},{"quote":"N7Q5fYX7YRnDQksfdBKnoUb3awm92n7QNAD35X3Rq1X","symbol":"NOK","decimals":6,"config":"CLWiX9ES1995MHEsKcpQkju8tgkTjvA5jWf1xBKroWS"},{"quote":"Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh","symbol":"NVDAx","decimals":8,"config":"Dz3apfCkKpj1efqyARtBuDSy8d1rvkcTUhPFaaTeri98"},{"quote":"PFER6ENqP8r8NF3CqVt4mFowxsin3V5MLidBNQFCC3x","symbol":"PFE","decimals":6,"config":"8RKjU5b3kGtwkFJHAkoLRt5A41re3DT3w7BaGWy1CT2u"},{"quote":"XsoBhf2ufR8fTyNSjqfU71DYGaE6Z3SUGAidpzriAA4","symbol":"PLTRx","decimals":8,"config":"EAsDrnvAANuNQyL1bxmSQ2x65UqtW6UqD3iWd7PsY8bY"},{"quote":"PTNzAfFAB4LvoUQEUUGrFMyUoRLExMYjH6CcfyQfsVP","symbol":"PTN","decimals":6,"config":"E8S8yRCrLFk9RQUtzKbYzAJHu9n4t7CLCdWDKfJhd216"},{"quote":"Xs8S1uUs1zvS2p7iwtsG3b6fkhpvmwz4GYU3gWAmWHZ","symbol":"QQQx","decimals":8,"config":"6TDxvF6AbfSo79sCiFSvR51JBvGzELJgVF2mHm1ttvNh"},{"quote":"QUBTAD8C9bMU9LvmMNgKPhrmBGbHvxpu6vfWQtThxxw","symbol":"QUBT","decimals":6,"config":"349SaZU59TzgGcNoLQtPrv2VaiuXevQtvkCokcSoYkDZ"},{"quote":"RBLXDGRD64AtRamHMFVcjqne3Ar7NLWtFtYNtsrf1cE","symbol":"RBLX","decimals":6,"config":"Aw5LkR4SQCHyNNX3JfmJDLeeQf9TrqjW6z5uj8rAbueQ"},{"quote":"RDDTGbhHwVXfyCvQMXzzowKjf5qrYBZAnehoXW83ooh","symbol":"RDDT","decimals":6,"config":"37yqc5YTeKv14YZyKR9EP2usA9exusfiEsbzNZbWSMqk"},{"quote":"RcZmt84VMJv9bDhKqmw1uWDahYrUT468VwAChTnfD8p","symbol":"RIVN","decimals":6,"config":"B2okNmG8tcbwTv3SLfND1JdUs1ddi5aXArxKCDfx2K4y"},{"quote":"RUMsPfFZFnN1ZmGANwP7FNMJMjKH4m9RiMePrtVtLe7","symbol":"RUM","decimals":6,"config":"ERfXv2WtQvb1ty8TJTX9R6vD3LrcHB37TH428rKzmfZg"},{"quote":"SCHHJ3jRdSjeFEVAaLrnYdx3Brphn92Ys7z1qkiCtPX","symbol":"SCHH","decimals":6,"config":"FN9BJH59qW2W2rXyKqKLe3mKPnh68DtEgWt748Bo5QwG"},{"quote":"SH55hfaipFAbwT42nQYhRoM5o5t61QpkmJ6p62vXB3m","symbol":"SHOP","decimals":6,"config":"AHn9BkkQZQ724EVw83MQNWncG4HCvastZJ3umYqJZenS"},{"quote":"SKHYhSjuRWHgikq8eRKbtBbpABgJSkd7ytQV14i9EQ3","symbol":"SKHY","decimals":6,"config":"BbXZSpmz48xocM1kp75gA5HUeFazLR8DK3W9woZqkTHx"},{"quote":"SNAPcESrvnH8yUdgeMF6xm1hym9b6hW6s8YeqeHdZFz","symbol":"SNAP","decimals":6,"config":"BSDBjwrFxM82oeV9wBP9MREGincXPiUXpuw5rpcRYsJ6"},{"quote":"SNDKbwMUQvZhnLnxLduradgLHG5KrPuKwpnrkkGRhfH","symbol":"SNDK","decimals":6,"config":"Ay78yCwnDM75WHWToaf9Xx7ortpovHRWZ2ES5w4rYzvz"},{"quote":"SPCXxcqXj6e5dJDVNovHN8744zkbhM2bYudU45BimGb","symbol":"SPCX","decimals":6,"config":"CpGQYMbcow7Dd5i1awDZbR2EuXhezpsgeEryqhkQAm1r"},{"quote":"Xs3oZwbHvqis4NYcf4YKWmEia2eC84wSiVrcYcTqpH8","symbol":"SPCXx","decimals":8,"config":"AnyGYjN4PzfgjZL3VXwTJ6My5ku579HmziZdeLrKxLd7"},{"quote":"SPHRp8cZaSQBTp1KMNP4V1X821SXhXWt4Q2yLdyHzju","symbol":"SPHR","decimals":6,"config":"J84ssxaVWmzTMocZ5gaxbzmie4unKQnxCRqSdRSQSxGW"},{"quote":"XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W","symbol":"SPYx","decimals":8,"config":"FCTbM2qGiKuygXeXDtc5YSKae3Ai53whSVPENyurRyWj"},{"quote":"SQQQAa3gUxgnqcEsdjPA4RQNQBgB97TnG2hJhk2WaGE","symbol":"SQQQ","decimals":6,"config":"D24td9UxL5sFWATYKPCfbnqZ4MwLhYs6zmgtKHSg9RTn"},{"quote":"Xs78JED6PFZxWc2wCEPspZW9kL3Se5J7L5TChKgsidH","symbol":"STRCx","decimals":8,"config":"6imhjgtzTfTmnEUwrGdxVyfhf3SezLozHTgciURRuBfh"},{"quote":"XsjQP3iMAaQ3kQScQKthQpx9ALRbjKAjQtHg6TFomoc","symbol":"TQQQx","decimals":8,"config":"14ngBeyZFt4mwjXhwWXQqFqByT7CeGfcfqZuYNnWyaRx"},{"quote":"XsDoVfqeBukxuZHWhdvWHBhgEHjGNst4MLodqsJHzoB","symbol":"TSLAx","decimals":8,"config":"9DgKyzWS2uDTJRh4bsYtp8hPTjyVwh31bTF2AiPYAFyg"},{"quote":"XsafvsGtzFqqHgTnA3aPC83EAMkacU5mcGtcSayhpVV","symbol":"TSMx","decimals":8,"config":"96ix9VkYsXxYTWfJYLn1pJqgEiMmCmyjUb6oCYZ2H7Pf"},{"quote":"TTWofwAge91oFhZs7kpQdyrVRkmevgM88xijGvQFbKo","symbol":"TTWO","decimals":6,"config":"GER69ZiJ87VutENtm1mcYUeHZa5ZzSQ1naMZP6KKP4TT"},{"quote":"UPSqUeMHcWbkdg784XuBUEF9DtySSnW9ur5LAVdcuB9","symbol":"UPS","decimals":6,"config":"7qsgRQtEZo8h1Z4C1Em6zbq5z5bPfk3SKhbLjC4U7qon"},{"quote":"URARfsinxCRw4JpvQhuT4CxavdZXZEMjv9ZwWmWpwag","symbol":"URA","decimals":6,"config":"CNqwYn6sW6FapP8yRrsc8oExSu4KYreWSJxbHqwq4dsM"},{"quote":"USNv3NkKA27Dh4nsHJDPhW4VoEcTQmjoZyJt2dqdwFu","symbol":"USO","decimals":6,"config":"9YmgwTFzARFuUqyntwJwLJhrRUwbPRYi3Gb6oGjvGEup"},{"quote":"WENAZ2WyPbmgvUcKfQ8hyMDfBQP9bZ65hsZ5KTFrRGZ","symbol":"WEN","decimals":6,"config":"CMAKHkYchgDKoGhEAj1cU3BPuYTKc2FX6vkzDmnJpVJK"},{"quote":"WULFeyfrj1VJKD9HhRTcW8R4g5HefUA11HDEdBv2WxD","symbol":"WULF","decimals":6,"config":"DgX9qaxVmu4LnsaAMazxwZtqNuM5qeC4Gvi5nfVq4WV"},{"quote":"A7bdiYdS5GjqGFtxf17ppRHtDKPkkRqbKtR27dxvQXaS","symbol":"ZEC","decimals":8,"config":"E25nGnQeRSE1eXvQmnF1DXAHeJXFvX67hEmUV3qvHqzH"}],"note":"Solana launches go through Meteora's Dynamic Bonding Curve (DBC) under a Nasdegen partner config per (quote, curve size): a terminal that already indexes DBC pools picks them up automatically, keyed by those configs. partnerConfigs lists the pre-funded quotes; any other Solana coin with a real market can be paired too (the launcher creates the config and the site verifies it, so a new config appears per such launch) (SOL, ZEC and the Backpack Securities stocks and ETFs issued through Sunrise), with the config public key each pool is created under."},"indexing":{"page":"https://nasdegen.fun/integrate/indexing","evm":{"chains":{"base":{"chainId":8453,"name":"Base","sources":{"factory":"0xFf66c00C1eE1079B425fEF4e5E6682ae6beb188E","launchAndBuy":"0x7418B19a20E693377703325fe15b25599724E2D5","listingFactory":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","curveFactory":"0xD8c5d2860abFE05705E412e7debb3d1Fd2d46dDB","rulesFactoryV3":"0xb936057CE0e50891655e559A196F007E6ac72B00","feeStyleFactory":"0x99f05241BD59848080A54f3C9195AE186CA38e51","creatorFeeFactory":"0xCA39a6851AeCaA3221C8eEBF0EAD868AABb7383E","pegFactory":null},"hooks":{"liquidityGate":"0x5A56d12AdBD415021826B884ccFdF5a54cbD2800","curveHook":"0xeA1A065e89611999bADfcBa24305d71Ac2fBa844","feeStyleHook":"0x65F562786542c2cd26Cfa0f7925Da472d6aF6880"},"poolManager":"0x498581fF718922c3f8e6A244956aF099B2652b2b"},"robinhood":{"chainId":4663,"name":"Robinhood Chain","sources":{"factory":"0xa987eD06C8d386C796c4E49AA09Aa83361fbECc9","launchAndBuy":"0x04D6cbA8b9b3B5A6D2D1F6f2F2C53e3EE65C720c","listingFactory":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","curveFactory":"0xa93A9b7A38D36B8882878558B178720592A79A4E","rulesFactoryV3":"0xc03fc0f3D8Ba1Fe95D01212038721c5Ef7f8368a","feeStyleFactory":"0x6ae0BD0ffdA8Db5930774EAC67525E0049832a9c","creatorFeeFactory":"0x34967D54e4B45aeDeD25649741eA6188eBa20CaC","pegFactory":null},"hooks":{"liquidityGate":"0xdac33249139E490DAFA09219e1EE125bf6f4a800","curveHook":"0x7779d6EddAbb17E8153b1d3e6dfb1379887D6844","feeStyleHook":"0xFa0651e29D1690D2B32c5897AC6a175EAd5D2880"},"poolManager":"0x8366a39CC670B4001A1121B8F6A443A643e40951"},"bnb":{"chainId":56,"name":"BNB Chain","sources":{"factory":"0xaB7FFC770fF5e7FeD0677c179e897A690ed4eBD9","launchAndBuy":"0xcBEB49eE51706D6C169276f44F5A613594586Bf2","listingFactory":"0x68dB27053AA61E226379060A7AAC33BfEd555d4e","curveFactory":"0x0e5676B609CE83DD299A1025D188548764A913e4","rulesFactoryV3":"0x6A92BfcFaa107ba8686D4285521f5C7d67F16f6B","feeStyleFactory":"0x8AE2ea8Cbd61869f8dF32563ECC38AD62A8141a9","creatorFeeFactory":"0x31637Eb0FaA1fE3EBFcF2939424979fB6aac8734","pegFactory":null},"hooks":{"liquidityGate":"0xC210DE2457fBeC8a7A8C6D884cc2259E4C102800","curveHook":"0x5214be97Ac1D5F4d86a378A5B75B289f114ba844","feeStyleHook":"0xC1cB0e098E709e9eB35989C200FDde5e6812e880"},"poolManager":"0x28e2Ea090877bF75740558f6BFB36A5ffeE9e9dF"}},"sources":[{"key":"factory","contract":"LaunchFactory","kind":"pool","summary":"Direct launches: deploys the token, opens a Uniswap v4 pool and locks 100% of the supply as one single-sided position. One token can open several pools at once (a multi-pair launch).","poolKey":"currency0 = quote, currency1 = token (the factory mines a salt so the token sorts above its quote), fee = Launched.lpFee (10000 to 30000 pips), tickSpacing = 200, hooks = the chain's LiquidityGate. Read it with factory.poolKeyOf(token) (first pool) or factory.poolKeyAt(token, i) / factory.poolsOf(token).","events":[{"contract":"LaunchFactory","name":"Launched","signature":"Launched(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Launched(address indexed token, uint256 indexed tokenId, address indexed launcher, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 supply, string metadataURI)","topic0":"0xda18b133e41a7fe4e3adc625c6eeaf9237558c875e411398a623cc9603aad0a9","use":"a new launch: token, tokenId (the locked position), launcher, quote, poolId, startTick, lpFee, supply, metadataURI. A multi-pair launch emits one per pool with the same token."},{"contract":"LaunchFactory","name":"MultiPairLaunched","signature":"MultiPairLaunched(address,bytes32[])","solidity":"event MultiPairLaunched(address indexed token, bytes32[] poolIds)","topic0":"0xa61112d06e0155d1f17b7bcef94fc48ca0406c6bc3152aca945cc8e835555479","use":"the full pool set of a multi-pair launch, in order"},{"contract":"LaunchFactory","name":"RewardPoolCreated","signature":"RewardPoolCreated(address,address,address)","solidity":"event RewardPoolCreated(address indexed token, address indexed pool, address indexed quote)","topic0":"0xcccf10613f67792eecfb9a80ab0ceb4928e43c66255e7a39e9dd5a2dad5bc103","use":"the creator side of the fees goes to holders through this RewardPool"},{"contract":"LaunchFactory","name":"FeeVaultCreated","signature":"FeeVaultCreated(address,address,address,uint8)","solidity":"event FeeVaultCreated(address indexed token, address indexed vault, address indexed quote, uint8 mode)","topic0":"0x255add866ba2eeef650e4e30a49e793bf95621d59796d33c2f5cfca46bc7300a","use":"the creator side of the fees goes to a FeeVault module (mode)"}]},{"key":"launchAndBuy","contract":"LaunchAndBuy","kind":"pool","summary":"A router that launches through the LaunchFactory and makes the creator's first buy in the same transaction. The factory then records the router as launcher.","poolKey":"the LaunchFactory's (the router only calls it)","events":[{"contract":"LaunchAndBuy","name":"LaunchedVia","signature":"LaunchedVia(address,address,uint256,uint256,uint256)","solidity":"event LaunchedVia(address indexed creator, address indexed token, uint256 tokenId, uint256 quoteIn, uint256 tokensOut)","topic0":"0x5bf63f84755bf9de4570848428b2e7a8fff53eb980b51ae4c555467365a14630","use":"the real creator of a router launch; quoteIn / tokensOut are the first buy. Show creator = LaunchedVia.creator (or router.creatorOf(token)), never the router."}]},{"key":"listingFactory","contract":"ListingFactory","kind":"listing","summary":"An existing ERC-20 brought into a locked pool (no new token is deployed).","poolKey":"currency0 = quote, currency1 = token, fee = Listed.lpFee, tickSpacing = 200, hooks = the LiquidityGate. Read it with listingFactory.poolKeyOf(tokenId).","events":[{"contract":"ListingFactory","name":"Listed","signature":"Listed(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Listed(address indexed token, uint256 indexed tokenId, address indexed lister, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 amount, string metadataURI)","topic0":"0xad5a4aaa469875ff13658232c22a8ba97398205fa40bdf452cdbd83b1ee2d117","use":"a new listing: token, tokenId, lister, quote, poolId, startTick, lpFee, amount locked, metadataURI"}]},{"key":"curveFactory","contract":"CurveFactory","kind":"curve","summary":"Bonding-curve launches. Trading starts on a per-launch BondingCurve contract and moves to a locked Uniswap v4 pool at graduation.","poolKey":"ordered by address (token_is_currency0 says which side the token is), fee = 0 in the key (the CurveHook charges the fee), tickSpacing = 200, hooks = the CurveHook. Read it with curveFactory.poolKeyOf(token), valid before and after graduation.","events":[{"contract":"CurveFactory","name":"CurveLaunched","signature":"CurveLaunched(address,address,address,address,address,uint256,uint256,uint256,uint16,uint16,string)","solidity":"event CurveLaunched(address indexed token, address indexed curve, address indexed launcher, address quote, address creatorFeeRecipient, uint256 supply, uint256 phantomQuote, uint256 graduationThreshold, uint16 feeBps, uint16 creatorTaxBps, string metadataURI)","topic0":"0x41a83fcb07d214b946bf3ed8ff5921bef5a4459be08287b8fe86e3de08103c08","use":"a new curve: token, curve (the BondingCurve to watch), launcher, quote, supply, phantomQuote, graduationThreshold, feeBps, creatorTaxBps, metadataURI"},{"contract":"CurveFactory","name":"CurveLaunchOptions","signature":"CurveLaunchOptions(address,uint32,uint16,uint16,uint256)","solidity":"event CurveLaunchOptions(address indexed token, uint32 snipeWindow, uint16 snipeStartBps, uint16 airdropBps, uint256 airdropTokens)","topic0":"0x718dd73f4177b643a4c4da4072fb4f3b3ca5d40c5714252c6b1a547aea4b8ecd","use":"snipe shield and airdrop reserve, right after CurveLaunched"},{"contract":"BondingCurve","name":"CurveBuy","signature":"CurveBuy(address,address,uint256,uint256,uint256,uint256)","solidity":"event CurveBuy(address indexed buyer, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 fee, uint256 tax)","topic0":"0xec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc455","use":"a buy on the curve (emitted by the per-launch curve address)"},{"contract":"BondingCurve","name":"CurveSell","signature":"CurveSell(address,address,uint256,uint256,uint256,uint256)","solidity":"event CurveSell(address indexed seller, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 fee, uint256 tax)","topic0":"0x8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df","use":"a sell on the curve"},{"contract":"CurveFactory","name":"Graduated","signature":"Graduated(address,bytes32,uint256,address,uint256,uint256,uint256,uint160)","solidity":"event Graduated(address indexed token, bytes32 indexed poolId, uint256 indexed tokenId, address quote, uint256 quoteAmount, uint256 tokenAmount, uint256 tokensBurned, uint160 sqrtPriceX96)","topic0":"0xd4df01b899fd11e56dd1988cc7505f0cb8fcbf6e06af3a4d3ee20936f3529072","use":"the curve moved into its v4 pool: poolId, tokenId, quoteAmount, tokenAmount, sqrtPriceX96. This is the Completed signal."},{"contract":"CurveFactory","name":"Abandoned","signature":"Abandoned(address,address,uint256,uint256)","solidity":"event Abandoned(address indexed token, address indexed venue, uint256 refundQuote, uint256 refundSupply)","topic0":"0x56189f752f9a4ea9b583fa556ef1d10e6993eaa22c72ade4f03c9a63c80a5fde","use":"the curve stalled and switched to refunds: trading is closed"}]},{"key":"rulesFactoryV3","contract":"RulesLaunchFactoryV3","kind":"pool","summary":"Direct launches of a coin with trading hooks built into the token. The supply is locked in a v4 pool the same way as a LaunchFactory launch.","poolKey":"currency0 = quote, currency1 = token, tickSpacing = 200, hooks = the factory's RulesGate. Read it with rulesFactoryV3.poolKeyOf(token).","events":[{"contract":"RulesLaunchFactoryV3","name":"Launched","signature":"Launched(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Launched(address indexed token, uint256 indexed tokenId, address indexed launcher, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 supply, string metadataURI)","topic0":"0xda18b133e41a7fe4e3adc625c6eeaf9237558c875e411398a623cc9603aad0a9","use":"the same shape and topic0 as LaunchFactory.Launched: filter by emitter address to tell them apart"},{"contract":"RulesLaunchFactoryV3","name":"RulesLaunched","signature":"RulesLaunched(address,(bool,bool,uint16,uint16,uint32,uint16,uint32,uint16),(bytes32,uint32,address,uint256,uint32,uint32,uint32,uint16,uint32,uint16,uint32,uint8,uint32,uint8,bool,uint32,bool,uint32,uint32,bool,uint32,address,uint16,uint16,uint16,uint32),(uint32,uint16,bool,uint32,uint16,uint32,uint16,uint64,uint16,address,uint32),bytes)","solidity":"event RulesLaunched(address indexed token, (bool,bool,uint16,uint16,uint32,uint16,uint32,uint16) rules, (bytes32,uint32,address,uint256,uint32,uint32,uint32,uint16,uint32,uint16,uint32,uint8,uint32,uint8,bool,uint32,bool,uint32,uint32,bool,uint32,address,uint16,uint16,uint16,uint32) extra, (uint32,uint16,bool,uint32,uint16,uint32,uint16,uint64,uint16,address,uint32) ext3, bytes custom)","topic0":"0x8814196990c3901203cbc45a6454adf6deda7fb5cc6a78ca4dea727e49600395","use":"the coin's hooks, as set at launch"}]},{"key":"feeStyleFactory","contract":"FeeStyleLaunchFactory","kind":"pool","summary":"Direct launches into a dynamic-fee pool whose hook sets each swap's LP fee.","poolKey":"currency0 = quote, currency1 = token, fee = 0x800000 (the v4 dynamic-fee flag), tickSpacing = 200, hooks = the FeeStyleHook. Read it with feeStyleFactory.poolKeyOf(token); the fee a swap pays now is feeStyleHook.quoteFee(key, params).","events":[{"contract":"FeeStyleLaunchFactory","name":"Launched","signature":"Launched(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Launched(address indexed token, uint256 indexed tokenId, address indexed launcher, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 supply, string metadataURI)","topic0":"0xda18b133e41a7fe4e3adc625c6eeaf9237558c875e411398a623cc9603aad0a9","use":"the same shape and topic0 as LaunchFactory.Launched, with lpFee = 0x800000"},{"contract":"FeeStyleLaunchFactory","name":"FeeStyleLaunched","signature":"FeeStyleLaunched(address,bytes32,(uint24,uint24,uint32,uint24,uint24,uint32,uint24,uint16))","solidity":"event FeeStyleLaunched(address indexed token, bytes32 indexed poolId, (uint24,uint24,uint32,uint24,uint24,uint32,uint24,uint16) style)","topic0":"0x5b492c33b9824503eda545b651c3b5b6ce6836c950a2792c1f6a95fa07246016","use":"the fee style (base fee, sniper decay, volatility and size terms)"}]},{"key":"creatorFeeFactory","contract":"CreatorFeeLaunchFactory","kind":"pool","summary":"Fee-style launches with creator-fee options fixed at launch: creators paid in the quote only, and/or a fee stream the current recipient can hand off. Its own locker (CreatorFeeLocker) emits the launch locker's fee events.","poolKey":"The same key as a FeeStyleLaunchFactory pool: currency0 = quote, currency1 = token, fee = 0x800000, tickSpacing = 200, hooks = the FeeStyleHook. Read it with creatorFeeFactory.poolKeyOf(token).","events":[{"contract":"CreatorFeeLaunchFactory","name":"Launched","signature":"Launched(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Launched(address indexed token, uint256 indexed tokenId, address indexed launcher, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 supply, string metadataURI)","topic0":"0xda18b133e41a7fe4e3adc625c6eeaf9237558c875e411398a623cc9603aad0a9","use":"the same shape and topic0 as LaunchFactory.Launched, with lpFee = 0x800000"},{"contract":"CreatorFeeLaunchFactory","name":"FeeStyleLaunched","signature":"FeeStyleLaunched(address,bytes32,(uint24,uint24,uint32,uint24,uint24,uint32,uint24,uint16))","solidity":"event FeeStyleLaunched(address indexed token, bytes32 indexed poolId, (uint24,uint24,uint32,uint24,uint24,uint32,uint24,uint16) style)","topic0":"0x5b492c33b9824503eda545b651c3b5b6ce6836c950a2792c1f6a95fa07246016","use":"the fee style (same topic0 as FeeStyleLaunchFactory's)"},{"contract":"CreatorFeeLaunchFactory","name":"CreatorFeeOptions","signature":"CreatorFeeOptions(address,uint256,bool,bool)","solidity":"event CreatorFeeOptions(address indexed token, uint256 indexed tokenId, bool quoteOnly, bool transferable)","topic0":"0xaf2513c666eb29ade040ea060cf9c320ad858cba2070421eba7c48659f30217e","use":"quoteOnly and transferable, fixed forever at launch"},{"contract":"CreatorFeeLocker","name":"HandedOff","signature":"HandedOff(uint256,address,address,(address,uint16)[])","solidity":"event HandedOff(uint256 indexed tokenId, address indexed from, address indexed by, (address,uint16)[] recipients)","topic0":"0x13391dca3ad6cec9e09e262a5d501e6f4523162ef29608ea183df13e1913c306","use":"a creator recipient's future fees moved (two steps, by that recipient); recipients is the full new list"}]},{"key":"pegFactory","contract":"PegLaunchFactory","kind":"pool","summary":"uPEG launches: every whole unit of the coin is a numbered object on an ERC-721 mirror, the supply locked 100% in a pool like a direct launch.","poolKey":"currency0 = quote, currency1 = token, tickSpacing = 200, hooks = the factory's gate. Read it with pegFactory.poolKeyOf(token).","events":[{"contract":"PegLaunchFactory","name":"Launched","signature":"Launched(address,uint256,address,address,bytes32,int24,uint24,uint256,string)","solidity":"event Launched(address indexed token, uint256 indexed tokenId, address indexed launcher, address quote, bytes32 poolId, int24 startTick, uint24 lpFee, uint256 supply, string metadataURI)","topic0":"0xda18b133e41a7fe4e3adc625c6eeaf9237558c875e411398a623cc9603aad0a9","use":"the same shape and topic0 as LaunchFactory.Launched"},{"contract":"PegLaunchFactory","name":"PegLaunched","signature":"PegLaunched(address,address,uint256,uint256,string)","solidity":"event PegLaunched(address indexed token, address indexed mirror, uint256 objects, uint256 unit, string baseURI)","topic0":"0x1e440301214979a0c9c137b856311a367ea03f9fdc1d896ed6eb2f4382c74766","use":"the mirror, object count and unit"}]}],"swap":{"contract":"PoolManager (Uniswap v4)","name":"Swap","signature":"Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24)","solidity":"event Swap(bytes32 indexed id, address indexed sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee)","topic0":"0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f","use":"every trade on a launch pool after it opens (topic1 = poolId). Curve trades before graduation are CurveBuy / CurveSell, not Swap."},"multiPair":"one token, 2 to 4 pools: group by token, list every pool id (LaunchFactory.poolsOf(token); API pools[])","feeSplit":{"protocolPct":30,"creatorPct":70},"lockedLiquidity":"every launch position is held by an ownerless locker with no withdraw, transfer or decrease path; only fees leave it","finality":{"confirmationsDefault":10,"confirmationsMin":3,"note":"The site's own indexer stays 10 blocks behind the head (never fewer than 3) and re-checks the block hashes it has stored; a block whose hash changed is dropped and its launches rebuilt from the canonical chain. Show head-of-chain launches if you want speed, but key them by (chain, token) and be ready to drop them when their block is replaced."}},"stages":{"suggestion":true,"almostBondedProgress":0.8,"curve":"new while progress < almostBondedProgress; almost from there; completed after Graduated (Solana: after migration); refunding after Abandoned","direct":{"bondedFdvUsd":35000,"almostFdvUsd":28000,"note":"a direct pool has no graduation; this milestone is a suggestion so it shares columns with curve coins"}},"solana":{"venue":"Meteora Dynamic Bonding Curve (DBC)","programs":{"dbc":"dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN","dammV2":"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG","launchVault":"7wFFThJSfjDWXyWTztxfLrY5uuxAaSpGesiG1CA37oHA"},"partner":"EfDn8an5ARYYwFkGjv2XrecZaPczoeiij4U8fQ9YcepP","configs":[{"quote":"So11111111111111111111111111111111111111112","symbol":"SOL","decimals":9,"config":"7ehAFn91xgYPgwRBiQi6TAbPgrkJKB61XkiLGq3Kv5xR"},{"quote":"XsbEhLAtcf6HdfpFZ5xEMdqW8nfAvcsP5bdudRLJzJp","symbol":"AAPLx","decimals":8,"config":"GbUeiVP77naQzV51aCtvMDbRmJXHE4jMTr5CXEfXm7dR"},{"quote":"AMC1qwR9KhiyrQBRPrxnfo4JfMeMZqEBvt5tgTytNNoc","symbol":"AMC","decimals":6,"config":"9k6PzCLgUuxgKyW7D6yBNwZPczpnbH75yvLSVrBLmtwn"},{"quote":"AMD8XwJXgQ9WV45Wyj9yFLejxzf2J6VM1PJY8bJEjeES","symbol":"AMD","decimals":6,"config":"A1B99ZbGJa4iHxsCUhtWbwUXgmGWhJQFqeBU2X2HKyNG"},{"quote":"XsXcJ6GZ9kVnjqGsjBnktRcuwMBmvKWh8S93RefZ1rF","symbol":"AMDx","decimals":8,"config":"55QiJ8VmetkuqFHATyhP1q7L1bNyddauLxYjJzjMktd5"},{"quote":"Xs3eBt7uRfJX8QUs4suhyU8p2M6DoUDrJyWBa8LLZsg","symbol":"AMZNx","decimals":8,"config":"5G1X77gmyT62gVp3CmkAiErrebxqKc3gqbX8T9iw6fiK"},{"quote":"ARMbSB1MBRQrY6PNMao1HdQ431VafC6JRJCsGZ2Yv3iJ","symbol":"ARM","decimals":6,"config":"2wMudRfdEW9aBpkV52mJ2djoUaomMRyFQo1CSBaJGUpV"},{"quote":"XsgSaSvNSqLTtFuyWPBhK9196Xb9Bbdyjj4fH3cPJGo","symbol":"AVGOx","decimals":8,"config":"HEV2NJv6ZXs72tH875iwj5E6d9525a7ooAtTgYsUGvBV"},{"quote":"BArimz1PcKZr8PcPh3tcZ2dg4S7FJLk3cw6R5F8GsHKg","symbol":"BA","decimals":6,"config":"CeSt7PkwESa9G6RcNYCYXvtvTnMTVnJEih5THX3eM6bV"},{"quote":"BABANGA4JE7Kkam4nTrALAwAVgsNJUuFJnnkF7S16BZp","symbol":"BABA","decimals":6,"config":"2jsSCEVWJmY5UHNU1ZCmeFh2QAjPaCorcm7GBMor4Wwv"},{"quote":"BBosJLw8ZzoATiEyywiifx7AgmrD2Cm3XjFWbhbRhChy","symbol":"BB","decimals":6,"config":"BkFARHVyfUnGYXxK5Jr6fWFjxTR7rViC8MK55LDPTqJS"},{"quote":"BoTx8y9ynfdxf5ZjWtCoBVkff52qKA82ysaLU8ZM6d8T","symbol":"BOT","decimals":6,"config":"4Wjvmeh1REFaGa2RUpgXzdwegJoazTNUfwp4ehbAHo4q"},{"quote":"Xs6B6zawENwAbWVi7w92rjazLuAr5Az59qgWKcNb45x","symbol":"BRK.Bx","decimals":8,"config":"3ojza6fCRLKHdCWyLgU9wY5ZJagseYyVepTFCBhZszqw"},{"quote":"BRVaZKg6J9iF2BEsdpsxJ9NyvN9PPxPZuoQUX2v8qqkk","symbol":"BROS","decimals":6,"config":"7rp6UVRxbGKVEEGy3ikYdZka3tw7HxUgtZpPd1FHus7g"},{"quote":"BULL151gUXcFV5wXEUqu9Am2L7Qt4bTJRLRuAUjkcspC","symbol":"BULL","decimals":6,"config":"GCpuoTMAjmmuBgF1u8nUGgbHxRmi4gon9vfj7redX84A"},{"quote":"Xs7ZdzSHLU9ftNJsii5fCeJhoRWSC32SQGzGQtePxNu","symbol":"COINx","decimals":8,"config":"3AUiFgysyAzVdfFnhBi4qz7izdTWMvLVSSoH6p7AGCVW"},{"quote":"CzLTZppPdZtTjyq3WGpHLstoc3GLhu7zH5Zg6xUa6Gv5","symbol":"COPX","decimals":6,"config":"5xZ5uX9fPh3Qu4ETvx6hhEpsWEKh5ZDvVqNuurDbVo5H"},{"quote":"CZEB3WNZuF2Yz1z2H81RcCk8T7fsw82KB33zqamASVsg","symbol":"COST","decimals":6,"config":"ETmNGXBfDLNpRYPAwzMaEYEczoNYAc8PLP8AQ4v4x16X"},{"quote":"XsueG8BtpquVJX9LVLLEGuViXUungE6WmK5YZ3p3bd1","symbol":"CRCLx","decimals":8,"config":"5YiKpChebtwkcWDzJJyPCN5vQHnGDj86qL37Hd1Ha38x"},{"quote":"CRWVJeR2yEZuDUKYfGuKCHvLz8ywn4LGvovHfy5WiFmi","symbol":"CRWV","decimals":6,"config":"F5JY3nJ3gC2xXoxGhJTuPswgPUpvNb876jpGQkt5uwez"},{"quote":"CYPHuMmCL1GxJWa2tsPhLKykC7GrHJTCHwbXD4g5uawK","symbol":"CYPH","decimals":6,"config":"9jtuCQUkTVw1incawhwvPuWW2nT9FLdZtkCUGNh45omt"},{"quote":"DELL2aRKQz7DMq5DrKLtkn47ZCnbxXPZXrSGbkmd13wy","symbol":"DELL","decimals":6,"config":"HaehzbT1YwjQiDQHbBUqHHUxDmnRYjfNVmK29vpoJhtq"},{"quote":"Xs2yquAgsHByNzx68WJC55WHjHBvG9JsMB7CWjTLyPy","symbol":"DFDVx","decimals":8,"config":"DGkdKVLWTY8EzoT52y8jAJ7HCk7fdXMGUBU2GHMdHsFq"},{"quote":"DJTu7vi8norVzdVAffgvb39VP7wjKeTsgaMBJrzfxvoF","symbol":"DJT","decimals":6,"config":"HzMB4kMAHyvVsDRgLeYSEb5VEf1ycBFpdXditZ9LunrA"},{"quote":"DKNGQFNGQmoBdXSRGKJ8tTu7uPDasw5JDcfMmWniNfow","symbol":"DKNG","decimals":6,"config":"EHvdAi4Nzn2RKTssRkFDzQ21J9TezBRfVhjytBZY8FHY"},{"quote":"DNUTsCvKbKwu2RM72cUuW3TD9YpzArzACcqYQssjPLSk","symbol":"DNUT","decimals":6,"config":"66Ek5VkjUSFKhhUKracUdYMfhGCTJWBYUcRLAXvCpn2Y"},{"quote":"DRAMjSWR7HRfJKjRkvQWYL2bcaejaVhuxEcjf4pAY4Cw","symbol":"DRAM","decimals":6,"config":"B8Hc4ab8hsD2ZTtTRJArBDtioUBqHXaggiizQSa5weHh"},{"quote":"EWY4owSJYMpwN33qGDu5gGxpkQkpMJu8ZUsQJaNZG5dv","symbol":"EWY","decimals":6,"config":"CikZ18jhraeh8p4FUfsThnsDK4oTjbHn53d6ShnQzqYv"},{"quote":"FLWSojG1gB5VStYR3Sb4nQFRt43UBYkqih1j2CpVLqgd","symbol":"FLWS","decimals":6,"config":"EWtawFwrHXw1SAZdYT6FL6Kca3m75zq7M4WtBZm1rzhC"},{"quote":"FLYRq3en8r2Z69gN3KyAnDrvnitEJNkwPYY7favinHeD","symbol":"FLY","decimals":6,"config":"4v3feB6EeLa1kznKqaiZxJ8hgFXwvigVTfwtWLWPTTaJ"},{"quote":"FWDtiB5fXHdVAewPqvHPL2dh4aBC1C6GacQbePoQXKjz","symbol":"FWDI","decimals":6,"config":"C1HpbizWjzs1K5NMcQ9jUbE3cqZkQCKFFC4Yf6FZnKJw"},{"quote":"Xsv9hRk1z5ystj9MhnA7Lq4vjSsLwzL2nxrwmwtD3re","symbol":"GLDx","decimals":8,"config":"F8qQrVnW6JbVv9fTc2qngZkT1UujL89cDwsJRhTiSBvz"},{"quote":"Xsf9mBktVB9BSU5kf4nHxPq5hCBJ2j2ui3ecFGxPRGc","symbol":"GMEx","decimals":8,"config":"3QuPipg9Tyhwgug3mMLCMcF6Qh5AJkPxzZQcr2gy5sPu"},{"quote":"XsCPL9dNWBMvFtTmwcCA5v3xWPSMEBCszbQdiLLq6aN","symbol":"GOOGLx","decimals":8,"config":"6xDretBvDiqrrQ1H15AU9jF67PcSvPEJ5i29uVMewf7n"},{"quote":"GPRR2u6NS5yBQHWGauoJ9HXgjrTH8dDsrBfTV5zAYvDH","symbol":"GPRO","decimals":6,"config":"7JeFYCksszFtt1puuh5XF5PhWKf1StAo8yBxno5gSPGo"},{"quote":"GRNDYDpqwpCm6jVxpbh4xT5AM4r3p391qYsKTHqgaET2","symbol":"GRND","decimals":6,"config":"2athFeFh9U1cw3VNyp5WX2HZoohJyDwmmy9Em2oqMsRe"},{"quote":"HiMSSzzwkZkrXJ4PGVJRdtfLaANeAztjjcgk5Dxe7Lwx","symbol":"HIMS","decimals":6,"config":"8zE6mTU4vE9yGtUWanwEdAxfdAoTMUxjS8UVryt4erHw"},{"quote":"HooDYv5RewLRiMLnEVq3VJqdqxhuE6c5eYvqejMC3e9A","symbol":"HOOD","decimals":6,"config":"7jqVkk3EkeB9Ub5ajKrm7CDBm7zfQCzf61RvKLgof817"},{"quote":"XsvNBAYkrDRNhA7wPHQfX3ZUXZyZLdnCQDfHZ56bzpg","symbol":"HOODx","decimals":8,"config":"6J3PheKzqkhfjgmmrdaXgQdcnbYaaKmjmrKAhuSiyJG7"},{"quote":"HTZsLG4zqaNvWMwXSLHH3GG5KyJpKwpBRsKVdMG6hvzP","symbol":"HTZ","decimals":6,"config":"8xPqTxTTqz4FqTvjNkmtVn5vDwrWakXFHGH78GPtzH8n"},{"quote":"BMKdM4yUxX12moFqVk195k7coMbaybd4RUKCUdm7D1Sk","symbol":"IBM","decimals":6,"config":"AG6FykvzS6MuFyYhydGgMCiHzXaJeAC6JZoNaisWhjUo"},{"quote":"iNTCy1qTsUEZQe3DSocLz1ZXXai34Gdw8THQh5rxFaF","symbol":"INTC","decimals":6,"config":"8doiZF8cFn6HVhN9PwMxo4EVFBJU5kzkC6apZHrwY4EZ"},{"quote":"XshPgPdXFRWB8tP1j82rebb2Q9rPgGX37RuqzohmArM","symbol":"INTCx","decimals":8,"config":"9CGUjGZNZbPzkHy97C7MsXXt2kDMFvDKov9pHZKMLKTe"},{"quote":"NQ5hSuXQZrbnrwcDVk2qN73njjd3E3v3badYHnj5thF","symbol":"IONQ","decimals":6,"config":"9KndMDPnUj7quVLB5Hycqswgi8aMRD6yzD9jMC24qrg4"},{"quote":"RENzhrJQgmAnfcLhU1U5XwAMc6TC15UA6jCbPBaasnj","symbol":"IREN","decimals":6,"config":"myvHkPZugtkeYzNpYubJiuk8b9TNYjCz7zhGSyGMJo4"},{"quote":"JNJg1znKdF712Phe7L7z52AATAvEjEytBdN2w8Lnh1Y","symbol":"JNJ","decimals":6,"config":"ALwZFbfbC4tAbQGykLWqmzEFQ9dteyqoXUt93DjmnM28"},{"quote":"XsaBXg8dU5cPM6ehmVctMkVqoiRG2ZjMo1cyBJ3AykQ","symbol":"KOx","decimals":8,"config":"A8TXHBkWwa4j9Y88jY6mu39jDErK9NzduBVhQTVFHSuH"},{"quote":"LLYuwZ33keFihgwoxXsBawy31AiRFLFSva32TYq5TvD","symbol":"LLY","decimals":6,"config":"5bsdUVixUbai3eAm9owtfvviHk4cqZ1RdELtFr4J4BHB"},{"quote":"LMT3i1BHgixFqPUgcyteJhnEz2dpy9i3cYy4pi9BoeV","symbol":"LMT","decimals":6,"config":"3sz4474VdJUygp8nVTAqbRCAR2YefBp41k9j1G5M66Z6"},{"quote":"LULUmT9VMttkfAJE236LXJcYJ2tTP7nunrSWR5G1BdS","symbol":"LULU","decimals":6,"config":"AQotLToEtksnV7kCnbybYj1FrJMuEteqZjJFGVg61d28"},{"quote":"LUV9GB51PNZNRyzzyYK3rtqFfvDvWtRiXZ34wVq2HrX","symbol":"LUV","decimals":6,"config":"DkoXXkkcV68DwL7Q36NsK74CgvFdQu7ZHd1FSsqki4mC"},{"quote":"XsqE9cRRpzxcGKDXj1BJ7Xmg4GRhZoyY1KpmGSxAWT2","symbol":"MCDx","decimals":8,"config":"D3kmQn4pDUvaXpVB5cRjv8uT6bMYcGUVNycLBK3djNnv"},{"quote":"Xsa62P5mvPszXL1krVUnU5ar38bBSVcWAB6fmPCo5Zu","symbol":"METAx","decimals":8,"config":"Fub35Nj5PCbF5QAwyTcxPAhAvHwTsESVcfrxomsjVLiW"},{"quote":"MGMuubtUEirmkhfEQdmGUh4pr7HuUdMWcZXFtpPbVJD","symbol":"MGM","decimals":6,"config":"8L1YqrvgpStidxBsxWftYdkZs49fxrkmLxexYk7tXbWD"},{"quote":"MRNAzXzhNcaEXJPibHEn8cd4vyekCDiivTyEwswLUCT","symbol":"MRNA","decimals":6,"config":"4833HFRRLTpaqYj8gL6911i938t6TWESVZJx1H5Au9eb"},{"quote":"MRVLSjkR2ceUBukujaD3xCyHP1H3B2SzpsNTZF546jo","symbol":"MRVL","decimals":6,"config":"ExhHscTrtGfxmQiZzFZ5CrbNJxEgZ9QMxwnfDvYPNC32"},{"quote":"XspzcW1PRtgf6Wj92HCiZdjzKCyFekVD8P5Ueh3dRMX","symbol":"MSFTx","decimals":8,"config":"EHtYWMhUyd98BcPgafDTk97BP6rYCnqhnPZXhCK1DjFs"},{"quote":"MSTRdWXMeZxdE8osAQy3fA4rvTY5rgummDSMEx6U7Nz","symbol":"MSTR","decimals":6,"config":"136CYfjkSkVFoo6tgjnrryVdBxdiNtmAmcJtQesqmG3D"},{"quote":"XsP7xzNPvEHS1m6qfanPUGjNmdnmsLKEoNAnHjdxxyZ","symbol":"MSTRx","decimals":8,"config":"BNus5twQyFPFsVeX9PCjzhUYUZexSoqUvBMRXmnt5v2m"},{"quote":"MUxEsUKSMACyw5fZf68wxf5FLnZVhtU9CwH8uNNGay1","symbol":"MU","decimals":6,"config":"F6ihMTXZAHStZ4CRLteRiAp89JRAc2GBKynFzLbQ5gSV"},{"quote":"NBiSF3UaVUFtRzHwAfxyHsBCAZWGEKnMpewAE4oh7BG","symbol":"NBIS","decimals":6,"config":"6VvQHDJU1gHJC2JaFqvHYACEihjCZU8S8UCBr3e8xkar"},{"quote":"NKEda5nHhNGgjrE9nDdMvaEmkmJ96qqxzBVZEcKmjSg","symbol":"NKE","decimals":6,"config":"GqPqi31os5XXf5f7KHVFHc1FStwGXDd7L4UgVkye2zc1"},{"quote":"N7Q5fYX7YRnDQksfdBKnoUb3awm92n7QNAD35X3Rq1X","symbol":"NOK","decimals":6,"config":"CLWiX9ES1995MHEsKcpQkju8tgkTjvA5jWf1xBKroWS"},{"quote":"Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh","symbol":"NVDAx","decimals":8,"config":"Dz3apfCkKpj1efqyARtBuDSy8d1rvkcTUhPFaaTeri98"},{"quote":"PFER6ENqP8r8NF3CqVt4mFowxsin3V5MLidBNQFCC3x","symbol":"PFE","decimals":6,"config":"8RKjU5b3kGtwkFJHAkoLRt5A41re3DT3w7BaGWy1CT2u"},{"quote":"XsoBhf2ufR8fTyNSjqfU71DYGaE6Z3SUGAidpzriAA4","symbol":"PLTRx","decimals":8,"config":"EAsDrnvAANuNQyL1bxmSQ2x65UqtW6UqD3iWd7PsY8bY"},{"quote":"PTNzAfFAB4LvoUQEUUGrFMyUoRLExMYjH6CcfyQfsVP","symbol":"PTN","decimals":6,"config":"E8S8yRCrLFk9RQUtzKbYzAJHu9n4t7CLCdWDKfJhd216"},{"quote":"Xs8S1uUs1zvS2p7iwtsG3b6fkhpvmwz4GYU3gWAmWHZ","symbol":"QQQx","decimals":8,"config":"6TDxvF6AbfSo79sCiFSvR51JBvGzELJgVF2mHm1ttvNh"},{"quote":"QUBTAD8C9bMU9LvmMNgKPhrmBGbHvxpu6vfWQtThxxw","symbol":"QUBT","decimals":6,"config":"349SaZU59TzgGcNoLQtPrv2VaiuXevQtvkCokcSoYkDZ"},{"quote":"RBLXDGRD64AtRamHMFVcjqne3Ar7NLWtFtYNtsrf1cE","symbol":"RBLX","decimals":6,"config":"Aw5LkR4SQCHyNNX3JfmJDLeeQf9TrqjW6z5uj8rAbueQ"},{"quote":"RDDTGbhHwVXfyCvQMXzzowKjf5qrYBZAnehoXW83ooh","symbol":"RDDT","decimals":6,"config":"37yqc5YTeKv14YZyKR9EP2usA9exusfiEsbzNZbWSMqk"},{"quote":"RcZmt84VMJv9bDhKqmw1uWDahYrUT468VwAChTnfD8p","symbol":"RIVN","decimals":6,"config":"B2okNmG8tcbwTv3SLfND1JdUs1ddi5aXArxKCDfx2K4y"},{"quote":"RUMsPfFZFnN1ZmGANwP7FNMJMjKH4m9RiMePrtVtLe7","symbol":"RUM","decimals":6,"config":"ERfXv2WtQvb1ty8TJTX9R6vD3LrcHB37TH428rKzmfZg"},{"quote":"SCHHJ3jRdSjeFEVAaLrnYdx3Brphn92Ys7z1qkiCtPX","symbol":"SCHH","decimals":6,"config":"FN9BJH59qW2W2rXyKqKLe3mKPnh68DtEgWt748Bo5QwG"},{"quote":"SH55hfaipFAbwT42nQYhRoM5o5t61QpkmJ6p62vXB3m","symbol":"SHOP","decimals":6,"config":"AHn9BkkQZQ724EVw83MQNWncG4HCvastZJ3umYqJZenS"},{"quote":"SKHYhSjuRWHgikq8eRKbtBbpABgJSkd7ytQV14i9EQ3","symbol":"SKHY","decimals":6,"config":"BbXZSpmz48xocM1kp75gA5HUeFazLR8DK3W9woZqkTHx"},{"quote":"SNAPcESrvnH8yUdgeMF6xm1hym9b6hW6s8YeqeHdZFz","symbol":"SNAP","decimals":6,"config":"BSDBjwrFxM82oeV9wBP9MREGincXPiUXpuw5rpcRYsJ6"},{"quote":"SNDKbwMUQvZhnLnxLduradgLHG5KrPuKwpnrkkGRhfH","symbol":"SNDK","decimals":6,"config":"Ay78yCwnDM75WHWToaf9Xx7ortpovHRWZ2ES5w4rYzvz"},{"quote":"SPCXxcqXj6e5dJDVNovHN8744zkbhM2bYudU45BimGb","symbol":"SPCX","decimals":6,"config":"CpGQYMbcow7Dd5i1awDZbR2EuXhezpsgeEryqhkQAm1r"},{"quote":"Xs3oZwbHvqis4NYcf4YKWmEia2eC84wSiVrcYcTqpH8","symbol":"SPCXx","decimals":8,"config":"AnyGYjN4PzfgjZL3VXwTJ6My5ku579HmziZdeLrKxLd7"},{"quote":"SPHRp8cZaSQBTp1KMNP4V1X821SXhXWt4Q2yLdyHzju","symbol":"SPHR","decimals":6,"config":"J84ssxaVWmzTMocZ5gaxbzmie4unKQnxCRqSdRSQSxGW"},{"quote":"XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W","symbol":"SPYx","decimals":8,"config":"FCTbM2qGiKuygXeXDtc5YSKae3Ai53whSVPENyurRyWj"},{"quote":"SQQQAa3gUxgnqcEsdjPA4RQNQBgB97TnG2hJhk2WaGE","symbol":"SQQQ","decimals":6,"config":"D24td9UxL5sFWATYKPCfbnqZ4MwLhYs6zmgtKHSg9RTn"},{"quote":"Xs78JED6PFZxWc2wCEPspZW9kL3Se5J7L5TChKgsidH","symbol":"STRCx","decimals":8,"config":"6imhjgtzTfTmnEUwrGdxVyfhf3SezLozHTgciURRuBfh"},{"quote":"XsjQP3iMAaQ3kQScQKthQpx9ALRbjKAjQtHg6TFomoc","symbol":"TQQQx","decimals":8,"config":"14ngBeyZFt4mwjXhwWXQqFqByT7CeGfcfqZuYNnWyaRx"},{"quote":"XsDoVfqeBukxuZHWhdvWHBhgEHjGNst4MLodqsJHzoB","symbol":"TSLAx","decimals":8,"config":"9DgKyzWS2uDTJRh4bsYtp8hPTjyVwh31bTF2AiPYAFyg"},{"quote":"XsafvsGtzFqqHgTnA3aPC83EAMkacU5mcGtcSayhpVV","symbol":"TSMx","decimals":8,"config":"96ix9VkYsXxYTWfJYLn1pJqgEiMmCmyjUb6oCYZ2H7Pf"},{"quote":"TTWofwAge91oFhZs7kpQdyrVRkmevgM88xijGvQFbKo","symbol":"TTWO","decimals":6,"config":"GER69ZiJ87VutENtm1mcYUeHZa5ZzSQ1naMZP6KKP4TT"},{"quote":"UPSqUeMHcWbkdg784XuBUEF9DtySSnW9ur5LAVdcuB9","symbol":"UPS","decimals":6,"config":"7qsgRQtEZo8h1Z4C1Em6zbq5z5bPfk3SKhbLjC4U7qon"},{"quote":"URARfsinxCRw4JpvQhuT4CxavdZXZEMjv9ZwWmWpwag","symbol":"URA","decimals":6,"config":"CNqwYn6sW6FapP8yRrsc8oExSu4KYreWSJxbHqwq4dsM"},{"quote":"USNv3NkKA27Dh4nsHJDPhW4VoEcTQmjoZyJt2dqdwFu","symbol":"USO","decimals":6,"config":"9YmgwTFzARFuUqyntwJwLJhrRUwbPRYi3Gb6oGjvGEup"},{"quote":"WENAZ2WyPbmgvUcKfQ8hyMDfBQP9bZ65hsZ5KTFrRGZ","symbol":"WEN","decimals":6,"config":"CMAKHkYchgDKoGhEAj1cU3BPuYTKc2FX6vkzDmnJpVJK"},{"quote":"WULFeyfrj1VJKD9HhRTcW8R4g5HefUA11HDEdBv2WxD","symbol":"WULF","decimals":6,"config":"DgX9qaxVmu4LnsaAMazxwZtqNuM5qeC4Gvi5nfVq4WV"},{"quote":"A7bdiYdS5GjqGFtxf17ppRHtDKPkkRqbKtR27dxvQXaS","symbol":"ZEC","decimals":8,"config":"E25nGnQeRSE1eXvQmnF1DXAHeJXFvX67hEmUV3qvHqzH"}],"recognise":"A DBC pool is a nasdegen.fun launch when its config account names the partner wallet as feeClaimer (and as leftoverReceiver). The configs listed here are the pre-funded ones; a coin paired with any other quote gets its own config, created by the launcher at launch time with the same partner wallet, so match on the config's feeClaimer rather than on this list alone.","creator":"The pool's creator field is the launcher's wallet, or, for a launch routed through the launch vault program, that program's PDA [\"launch\", mint]. In both cases the launcher is the fee payer of the launch transaction.","graduation":"When a curve reaches its migration threshold the pool migrates to a Meteora DAMM v2 pool (the config's migration option is MET_DAMM_V2) and the LP is permanently locked. Progress = quoteReserve / migrationThreshold from the DBC pool account. The \"Hooks forever\" curve size is built never to graduate: keep it in its curve column.","feeSplit":"Of the trading fee left after Meteora's own share, the creator side gets 70% and the partner 30%, the same split as on the EVM chains.","metadata":"The mint's Metaplex uri points at /api/launch/solana/meta/<mint> on this site (name, symbol, description, image, external_url, website, twitter, telegram, tweet, extensions).","finality":{"siteCommitment":"finalized","note":"The site's Solana reader (solana/trades.mjs) reads signatures and transactions at finalized, about 13 s behind confirmed, after an audit found confirmed trades that were later forked out. Use confirmed for a fast first display if you like, and finalized for anything that ranks, pays or is stored for good. A signature missing from finalized history (getSignatureStatuses with searchTransactionHistory) is dropped."}},"metadata":{"evm":"https://nasdegen.fun/api/launch/meta/<launcher>/<key> (the metadataURI in the launch event) or https://nasdegen.fun/api/launch/meta/<token>?chain=<chain>","solana":"https://nasdegen.fun/api/launch/solana/meta/<mint>","fields":"name, symbol, description, image, external_url, x, website, twitter, telegram, tweet (the X post announcing the coin), extensions { website, twitter, telegram }"},"apis":[{"path":"/api/launch/list","perMinute":90,"cache":"public, s-maxage=2, stale-while-revalidate=10","url":"https://nasdegen.fun/api/launch/list"},{"path":"/api/launch/live","perMinute":120,"cache":"public, s-maxage=2, stale-while-revalidate=10","url":"https://nasdegen.fun/api/launch/live"},{"path":"/api/launch/search","perMinute":60,"cache":"public, s-maxage=5, stale-while-revalidate=30","url":"https://nasdegen.fun/api/launch/search"},{"path":"/api/launch/candles","perMinute":60,"cache":"public, s-maxage=5, stale-while-revalidate=30","url":"https://nasdegen.fun/api/launch/candles"},{"path":"/api/launch/feed","perMinute":null,"cache":"public, s-maxage=2, stale-while-revalidate=10","url":"https://nasdegen.fun/api/launch/feed"},{"path":"/api/launch/meta/{token}","perMinute":null,"cache":"public, max-age=300","url":"https://nasdegen.fun/api/launch/meta/{token}"},{"path":"/api/launch/solana/meta/{mint}","perMinute":null,"cache":"public, max-age=300","url":"https://nasdegen.fun/api/launch/solana/meta/{mint}"},{"path":"/api/stream","perMinute":6,"cache":"no-store (opens per minute; one connection lasts about 290 s)","url":"https://nasdegen.fun/api/stream"},{"path":"/api/integrate/kit.json","perMinute":null,"cache":"public, s-maxage=60, stale-while-revalidate=300","url":"https://nasdegen.fun/api/integrate/kit.json"}],"tag":{"launchpad":"nasdegen.fun","logo":"https://nasdegen.fun/brand/mark-512.png","logoSvg":"https://nasdegen.fun/brand/mark.svg","x":"https://x.com/nasdegen","positioning":"the most customizable launchpad","site":"https://nasdegen.fun"}}}