> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mobula.io/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Integrate Bottom.fun on Robinhood Chain

> Complete Bottom.fun integration guide for Robinhood Chain: contracts, ABI, Uniswap V4 pricing, liquidity tracking, hook bonding curve graduation, migration, and token metadata.

# Bottom.fun Launchpad Integration on Robinhood Chain

Learn how to index and integrate the Bottom.fun launchpad on Robinhood Chain, including contract discovery, ABI events, token pricing, liquidity, bonding state, graduation, and metadata.
Integrate Bottom.fun Uniswap v4 hook pools, curve progress, graduation, and metadata. This guide describes the public contract surface for an independent integration.

## Network and contracts

Unless another chain is listed, these addresses are for Robinhood Chain (`chainId 4663`). Verify proxy implementations and mutable configuration at the indexed block.

| Role    | Address                                      |
| ------- | -------------------------------------------- |
| Factory | `0x1bed2687321074a198302c004036b51923812b18` |
| Hook    | `0xd23c94bd8cbeb48c169c020e16a844aeab2368cc` |
| Locker  | `0xf46663171d1d0653fe7c3b8e42d43bccac137c56` |
| WETH    | `0x0bd7d308f8e1639fab988df18a8011f41eacad73` |

## Market discovery and ABI

The market is a Uniswap v4 pool identified by `PoolId`, not a pool contract address. Accept only pool keys whose `hooks` field equals the Bottom.fun hook. Resolve the pool key from the locker and preserve `currency0/currency1` order.

### Relevant ABI

```solidity theme={null}
event CurveSwap(bytes32 indexed poolId,address indexed trader,bool isBuy,uint256 amountIn,uint256 amountOut,uint160 sqrtPriceX96,uint24 feeBps,address referrer);
event Graduated(bytes32 indexed poolId,address indexed token,uint256 quoteRaised,uint256 blockNumber);
function graduationQuote() view returns (uint256);
function poolState(bytes32 id) view returns (uint8 phase,uint256 quoteRaised,uint24 feeBps,uint256 launchBlock);
function pools(bytes32 id) view returns (address token,bool tokenIs0,uint8 phase,uint64 launchBlock,uint128 quoteRaised);
function poolKeys(bytes32 id) view returns (address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks);
function launches(address token) view returns (address token,address creator,bytes32 poolId,bytes32 socialClaimId,uint64 launchBlock,address factory,string metadataURI);
```

## Launchpad architecture and AMM model

Bottom.fun is a token launchpad built on top of Uniswap v4. PoolManager provides the shared AMM and concentrated-liquidity engine, while the Bottom.fun hook, factory, registry, and locker add launch creation, curve accounting, fees, metadata, and graduation.

**Classification: Uniswap v4-like with a custom hook.** The market is a PoolManager `PoolId`/`PoolKey`, uses `currency0`, `currency1`, `sqrtPriceX96`, ticks, and `ModifyLiquidity`. Unlike a plain v4 pool, the Bottom.fun hook emits `CurveSwap`, owns curve phase and quote-raised state, and emits an explicit graduation event.

**Shared with V4:** singleton PoolManager identity, PoolKey ordering, square-root pricing, hooks, and concentrated liquidity. **Protocol-specific:** factory/registry/locker wiring, hook-level swap accounting, `phase`, `quoteRaised`, and `graduationQuote`.

## Price calculation

Use `sqrtPriceX96` from `CurveSwap` or PoolManager state with the Uniswap v4 formula `currency1/currency0 = sqrtPriceX96² / 2¹⁹²`, followed by decimal adjustment. Determine whether the launched token is currency0 from `tokenIs0`.

## Liquidity tracking

Before graduation, update quote raised and token/quote flows from each `CurveSwap`. Track PoolManager `ModifyLiquidity` for the v4 position. Do not treat the v4 liquidity scalar as reserves; derive token amounts from the current price and tick range.

## Launchpad state, bonding, and migration

Read `graduationQuote()` instead of assuming a constant. While `phase < 2`, `progress = clamp(quoteRaised / graduationQuote × 100)`. `phase >= 2` or `Graduated` means bonded. Buys add to `quoteRaised`; sells must subtract according to emitted quote flow.

## Metadata

Resolve the registry with `factory.registry()`, then read `launches(token).metadataURI`. Fetch JSON from HTTPS/IPFS and map `name`, `symbol`, `image`, `description`, `website`, `twitter`, and `telegram`; use ERC-20 fields as fallback.

## Indexing checklist

1. Index creation and bind the launched token to its canonical market.
2. Preserve on-chain token/currency order exactly.
3. Replay logs in block, transaction, and log-index order.
4. Keep raw integers until decimals are applied.
5. Treat graduation as protocol state, not a generic price shortcut.

## Historical indexing notes

Use block-scoped reads when initializing historical state. Do not mix `latest` reads into an old-block replay. Store launched-token identity separately from native pool ordering.

## Related Robinhood Chain launchpad integrations

* [Bow.fun launchpad integration on Robinhood Chain](/almanac/robinhood-launchpads/bowfun)
* [Klik launchpad integration on Robinhood Chain](/almanac/robinhood-launchpads/klik)
* [RobinFun launchpad integration on Robinhood Chain](/almanac/robinhood-launchpads/robinfun)

For broader methodology, see [Bonding Curves Mathematics](/almanac/bonding-curves) and [Pricing Engine Deep Dive](/almanac/pricing-engine).
