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).
Mainnet: Robinhood Chain (4663)
Section titled “Mainnet: Robinhood Chain (4663)”Merry Men contracts
Section titled “Merry Men contracts”| 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).
Uniswap V3 and WETH
Section titled “Uniswap V3 and WETH”| 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. |
Testnet: Robinhood Chain (46630)
Section titled “Testnet: Robinhood Chain (46630)”Merry Men contracts
Section titled “Merry Men contracts”| Contract | Address |
|---|---|
LaunchpadFactory |
0xEdA68ADFeE36c80F5FF2503d12b03dbD76363C1c |
LpLocker |
0xf1a64F0affE4ddf3F27342Fa65E08453E4d6e4fd |
BuybackTreasury |
0xEb85a2FA0abbe388bE759509657D08904cf80135 |
Uniswap V3 and WETH
Section titled “Uniswap V3 and WETH”| 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
A note on routers
Section titled “A note on routers”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.
Protocol configuration
Section titled “Protocol configuration”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 |
Invariants
Section titled “Invariants”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. |
Related
Section titled “Related”- Onchain events: events emitted by these contracts.
- Reading token state: reads against the factory, pool, and token.

