Skip to content

Contract addresses

All addresses below are verified on-chain. Merry Men contracts are Blockscout-verified; Uniswap V3 and WETH addresses were confirmed via eth_call linkage (PositionManager.factory() / .WETH9() and factory.feeAmountTickSpacing(10000) == 200).

Contract Address
LaunchpadFactory 0x4337a34535abf5cdae8f9074d4824f87d5e79daa
LpLocker 0x6e21a031650e866bcab71da2a5d36988b877aa26
BuybackTreasury 0x6b5fcea2899fbb77ad1e6c76e0a823ef2b5f38a1
LaunchDelegate 0x9ef6874ac4bdfaa0ba8f8ac577c65e54999e18f8
RewardsDistributor 0xb81Db9E11Ce95482Ce33cBf16317E22A8ea0c558
FeeStreamMarket 0x7d612aac82cfe054ad5bd7c77eecae457f618d6e

The locker and treasury are created by the factory itself. The factory, locker, treasury, delegate, and the first launch token are Blockscout-verified; subsequent launch tokens auto-verify (identical bytecode).

Contract Address Notes
WETH 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 18 decimals
UniswapV3Factory 0x1f7d7550B1b028f7571E69A784071F0205FD2EfA 1% tier live (tickSpacing = 200)
NonfungiblePositionManager 0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3
SwapRouter02 0xcaf681a66d020601342297493863e78c959e5cb2 Use this for swaps. No-deadline exactInputSingle.
QuoterV2 0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7
UniversalRouter 0x8876789976dEcBfCbBbe364623C63652db8C0904 ⚠️ Cannot route our V3 pools: baked factory/init-hash mismatch. Do not use.
Contract Address
LaunchpadFactory 0xEdA68ADFeE36c80F5FF2503d12b03dbD76363C1c
LpLocker 0xf1a64F0affE4ddf3F27342Fa65E08453E4d6e4fd
BuybackTreasury 0xEb85a2FA0abbe388bE759509657D08904cf80135
Contract Address Notes
WETH 0x8d949e9D5a2cD5D6DCfB27e461D3aC23aEE5708c 18 decimals
UniswapV3Factory 0x7F318400ed8d1534652801d636AD22F0726Cc106
NonfungiblePositionManager 0xdcfeb9a5640ffDa9Ab51Fa4Ca6371501a661682D
SwapRouter 0xf0913b7291C1FD842e5c808aeb2e96353B156DFE Use this for swaps. Original router, deadline-in-struct.
QuoterV2 0x9De4ff50C5b1b3614A758FC2432FA1bF598C87AA
UniversalRouter 0x1DD857F34cf3fB6720ab4a4476A5fDF5A260B9b7 ⚠️ Different Uniswap deployment (wrong WETH). Do not use for our pools.
Permit2 0x000000000022D473030F116dDEE9F6B43aC78BA3 Canonical

RPC: https://rpc.testnet.chain.robinhood.com

Testnet and mainnet ship different Uniswap routers with different ABIs. This is the single most common integration mistake:

Network Router to use exactInputSingle shape Selector
Mainnet (4663) SwapRouter02 0xcaf6… No deadline 0x04e45aaf
Testnet (46630) SwapRouter 0xf091… Deadline in struct 0x414bf389

Encode the swap for the wrong variant and it reverts. On both networks the UniversalRouter cannot route Merry Men pools (factory / init-code-hash mismatch), so never route swaps or buybacks through it.

The deployed factory generation uses:

Parameter Value Meaning
feeTier 10000 1% Uniswap V3 fee tier
creationFeeWei 0 No launch fee
protocolFeeBps 5000 50% creator / 50% protocol on collected fees
BUYBACK_SHARE_BPS 3000 Of the protocol share: 30% buyback / 70% ops

The core contracts are built and tested to hold these invariants (Foundry invariant + fork tests, 100% line/branch/function coverage on the core three):

# Invariant
L1 Custody No code path transfers a locked position NFT out of the locker. Only fees can be extracted.
L2 Fee conservation claimFees pays the protocol share to treasury and the remainder to the creator, per collected asset; position principal is never moved.
L3 Single-sided seed Immediately after createToken, the position holds token-only liquidity and zero WETH. Enforced in-contract; fuzzed across both address orderings.
L4 Fixed supply Total supply equals the launch amount forever; no mint path exists after construction.
L5 Launch atomicity createToken fully completes or reverts, never a half-launched token with unlocked or WETH-contaminated liquidity.
L6 Fee accounting Creation fee forwarded to treasury; any msg.value excess refunded; the factory holds no residual ETH.