Developers
Everything below is public and permissionless. You do not need an API key, an allowlist, or our cooperation to build on any of it.
Chain
| Network | Robinhood Chain (Arbitrum Orbit L2) |
| Chain ID | 4663 |
| RPC | https://rpc.mainnet.chain.robinhood.com |
| Gas token | ETH |
The public endpoint rate-limits heavy clients and keeps only a few thousand blocks of history, use an archive provider for indexing or fork testing.
Contracts
| PopLaunchFactory | 0x0000…0000 |
| PopQuoteRegistry | 0x0000…0000 |
| PopHook | 0x0000…0000 |
| PopLocker | 0x0000…0000 |
| PopFeeEscrow | 0x0000…0000 |
| Uniswap V4 PoolManager | 0x8366…0951 |
Per-launch curve and token addresses come from the factory's TokenLaunched event, or getLaunchedToken(token). Sources are verified. See /proof.
Reading a launch on-chain
// Full launch record: curve, creator, quote, phase, fee terms
factory.getLaunchedToken(token) -> LaunchedToken
// Live curve state
curve.getReserves() -> (quoteReserve, tokenReserve)
curve.realQuoteReserve() -> progress toward graduationThreshold
curve.sellableTokens() -> 0 once ready to graduate
curve.readyToGraduate() -> bool
// Trading (quote is an ERC-20: approve the curve first)
curve.buy(quoteIn, minTokensOut, recipient, deadline)
curve.sell(tokensIn, minQuoteOut, recipient, deadline)
// Holder rewards (only on HolderRewards launches)
rewardToken.claimable(account) -> uint256
rewardToken.claim()
rewardToken.sync() // permissionless; credits any new inflowAnyone-can-call functions
These are not privileged. If you run a keeper or a bot, these are yours to call:
factory.graduate(token): drain a filled curve.factory.createGraduatedPool(token): seed and lock the pool. Retryable forever.curve.sweepFees(): settle pending fees, burns and rewards.registry.listQuote(token, adapterId): list any qualifying quote token.registry.repegQuote(token): refresh a quote's peg (once per day, clamped).rewardToken.sync(): credit rewards that have arrived.
Indexer API
A Ponder indexer serves the data this site runs on. It is read-only and open.
GET http://localhost:42069/quotes
GET http://localhost:42069/launches/<token>/trades
GET http://localhost:42069/launches/<token>/candles/<60|900|3600|86400>
GET http://localhost:42069/launches/<token>/holders
POST http://localhost:42069/graphql # full schema
http://localhost:42069/sql/* # @ponder/client live queries (SSE)Prices are stored as quote-per-token scaled by 1e18, so 6-, 8- and 18-decimal quotes share one representation. ETH and USD conversion is deliberately left to the consumer rather than baked into the data.
Events worth indexing
PopLaunchFactory: TokenLaunched, LaunchSwept, PoolGraduated,
CreatorFeeRecipientUpdated
PopBondingCurve: CurveBuy, CurveSell, FeesSwept, QuoteBurned,
HolderRewardsPushed, SnipeTaxCharged,
AutoGraduationFailed
PopHook: PoolRegistered, HookFeeCollected, PoolFeesSwept,
PoolQuoteBurned, PoolHolderRewardsPushed
PopQuoteRegistry: QuoteListed, QuoteRepegged, QuotePausedUpdated
PopLocker: PositionLocked, TokenSupplyLockedAutoGraduationFailed is the one to alert on: it means a curve filled but the crossing buy ran out of gas before graduating, and someone should call graduate().
Something unclear or wrong? The contracts are the source of truth, and every claim here is checkable on /proof.