Contracts
Deployed on Base mainnet, chain ID 8453.
| contract | address |
|---|---|
PairLaunchpad | 0x07dCAD32902623545a2Bd1d6b2c9b2210B7EA20f |
FeeVault | 0x41A00c179C96380C4952B698b3B13D4d2B005816 |
QuoteRegistry | 0x8D24424806cE1bfEFAdec9328A2C1c4e8EBFeA68 |
CompositeQuoteGate | 0xaBaD2c322A087dDE9F4633E5e6c2F2b5CC128Cc5 |
UniV3QuoteGate | 0x40f7F4Ae85f293Ac9bD53374BBdc98b372992be0 |
AerodromeQuoteGate | 0xe1B63AF3219147a396fd2B878175E305A6394656 |
The source is not verified on Basescan yet. Until it is, you cannot read the code of what you are sending funds to, and none of the claims on these pages are independently checkable. That is a real gap, not a formality.
External contracts it uses
| Uniswap v4 PoolManager | 0x498581fF718922c3f8e6A244956aF099B2652b2b |
| Uniswap V3 factory (measurement only) | 0x33128a8fC17869897dcE68Ed026d694621f6FDfD |
| Aerodrome Slipstream factory | 0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A |
| Aerodrome Slipstream factory #2 | 0xf8f2eB4940CFE7d13603DDDD87f123820Fc061Ef |
| Chainlink ETH/USD | 0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70 |
| Chainlink BTC/USD | 0x64c911996D3c6aC71f9b455B1E8E7266BcbD848F |
Calls worth knowing
Before launching
// Non-reverting. Returns whether it would be allowed, and why not if not.
registry.status(address quote)
returns (bool eligible, Decision decision, Report report)
// The bar this particular asset has to clear — $15,000 if listed, $50,000 if not.
registry.requiredDepthUsdE8(address quote) returns (uint256)
Launching
launchpad.launch(LaunchConfig cfg) payable returns (address token, bytes32 poolId)
launchpad.predictToken(address creator, bytes32 salt) returns (address)
launchpad.launchFee() returns (uint256)
LaunchConfig carries feeRoute (0 keeps the fees, 1 buys back and burns) and feeRecipient (zero
means the launching wallet), so both choices are made in the launch transaction rather than as a
follow-up.
After launching
// Anyone can call. Proceeds only ever reach the recorded recipient, the sink and the treasury.
feeVault.collect(address token)
// Creator only. Both take effect from the next collect.
feeVault.setFeeRoute(address token, FeeRoute route)
feeVault.setFeeRecipient(address token, address recipient)
// Reads
feeVault.launchOf(address token) returns (Launch) // includes the PoolKey
feeVault.feeRouteOf(address token) returns (FeeRoute)
feeVault.feeRecipientOf(address token) returns (address)
feeVault.owed(address token, address who) returns (uint256) // a payout that could not be pushed
feeVault.claim(address token) // collect one
Owner powers
The owner can retune the depth bars, the fee bounds, the treasury, the buyback sink, the curated list and the gates. It cannot touch a launch's liquidity, change an existing launch's creator share, or redirect a creator's fees.
Ownership transfer is two-step everywhere: a handover that is never accepted leaves the current owner in place rather than sending the protocol to a wrong address.
Today the owner is a single EOA. It should be a multisig behind a timelock, and the contracts do not enforce that themselves.

