State, events & indexer
The production app reads indexed data from the Rust backend at https://api.degenx.fun/graphql. Indexed data can lag the chain. Use fresh contract reads and exact-call simulation before signing; a database row does not authorize a transaction.
Read a launch
Section titled “Read a launch”Resolve the gauge through launchpad.tokenToGauge(token) and quote asset through tokenToQuote(token). Then read:
| Read | Meaning |
|---|---|
gaugeActive() |
Gauge has not successfully graduated; combine with completion/refund state |
gaugeClosable() |
Curve completion condition |
quoteRaised() |
Current tracked curve reserve; reset after graduation |
quoteTarget() |
This launch’s original target; remains readable after graduation |
tokenPurchased() / tokenTarget() |
Curve allocation progress |
curveParameters() |
This gauge’s snapshotted curve settings |
snipeTaxSeconds() / snipeTaxStartBps() |
This launch’s anti-snipe settings |
snipeTaxRate(buyer) |
Current buyer-specific rate, 1e18-scaled |
adapter() / poolId() |
Venue integration and actual graduated pool |
feeEscrow() / buybackVault() |
Snapshotted fee infrastructure |
refundsEnabled() / closableSince() |
Recovery mode and graduation stall timing |
launchpad.feeRecipient(token) |
Live creator-side recipient and authority |
An inactive curve does not imply the token has no market. Check the pool state. A complete but deferred curve requires graduation/recovery handling, not ordinary curve trading.
Events to follow
Section titled “Events to follow”| Source | Events / purpose |
|---|---|
| Launchpad | NewToken, FeeRecipientSet, quote/default configuration events, takeover events |
| Each gauge | Buy, Sell, PoolLaunched, GraduationDeferred, FeesDistributed, refund events |
| Launch token | ERC-20 Transfer for balances and holders |
| FeeEscrow | Creator/protocol fee credits and withdrawals |
| BuybackVault | Funding, executed purchases and vesting releases |
| Adapter / PoolManager | Hook fees and v4 pool swaps, filtered by the registered pool ID |
Download the full ABIs for exact event field types. Never invent a signature based only on a display label.
When a NewToken event discovers a gauge, fetch its logs from that same block before proceeding. An initial developer buy and even graduation can happen inside the creation transaction. Merge discovered logs in block/transaction/log order and make projections idempotent.
Query the current API
Section titled “Query the current API”This query was executed successfully against production on 15 September 2026:
curl https://api.degenx.fun/graphql \ -H 'Content-Type: application/json' \ --data '{"query":"{ tokens(first: 2) { id symbol name quoteTarget } }"}'quoteTarget is returned as an integer string in the quote’s base units. USDC targets 10000000 and 10000000000 mean 10 and 10,000 USDC respectively. JSON floating-point numbers are unsuitable for arbitrary token atom amounts.
Trades and charts across graduation
Section titled “Trades and charts across graduation”The backend indexes both gauge trades and registered Uniswap v4 swaps into the trade feed and candle series. Preserve the venue and pool identity while presenting the token’s continuous history. Do not count a token transfer as a second trade.
For six-decimal USDC, a marginal price integer can truncate to zero while trade-derived prices remain meaningful. Store sufficient decimal precision for realized prices and candles. USD valuations in the current Arc deployment use the USDC-as-one-dollar assumption, not a live depeg oracle.
WebSocket speed with HTTP recovery
Section titled “WebSocket speed with HTTP recovery”Production uses Alchemy newHeads over WSS as a low-latency wake-up. HTTP eth_getLogs reconciliation with a durable cursor remains authoritative, on a five-second polling interval. WebSocket messages can be missed; reconnecting must catch up from durable progress, not from the latest notification alone.
The public Arc replay begins at block 20,851,553 to retain the successful canary and active test launch while excluding the known-broken first canary. It is therefore not a complete history from the factory’s original deployment block. A full independent indexer should discover all factory launches and clearly label failed/refunding histories.