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

NetworkRobinhood Chain (Arbitrum Orbit L2)
Chain ID4663
RPChttps://rpc.mainnet.chain.robinhood.com
Gas tokenETH

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

PopLaunchFactory0x0000…0000
PopQuoteRegistry0x0000…0000
PopHook0x0000…0000
PopLocker0x0000…0000
PopFeeEscrow0x0000…0000
Uniswap V4 PoolManager0x8366…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 inflow

Anyone-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, TokenSupplyLocked

AutoGraduationFailed 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.