Docs·Metrics reference

Metrics reference

Launches and graduation

Launch counts net of dev launches, the graduation-rate denominator as a published choice, net raised, and the three burn sites.

Version
1.0
Updated
2026-08-29
Source
Metric definitions v1.2

launches#

derivationΣ LaunchFactory.launchCount() over every factory in priorFactories[] plus the current one, minus launches whose TokenLaunched.dev == true
sourceLaunchFactory.launchCount() · LaunchFactory.TokenLaunched

graduations#

Σ BondingCurve.Graduated(address indexed pool, uint256 ethAmount, uint256 tokenAmount) — equivalently V4GraduationAdapter.GraduatedToV4. The two fire in the same transaction. Prefer GraduatedToV4 when the pool identity is needed; it is the only one carrying positionId.

The two events are not interchangeable in one respect
FieldWhat it actually is
GraduatedToV4.ethAmount, GraduatedToV4.tokenAmountWhat was offered, not necessarily what was minted. The adapter re-derives the actual amounts after any squat-clearing swap and burns or forwards the remainder.
Graduated.ethAmountThe curve’s whole realEthReserve at that instant. Exact.

graduationRate — a published choice#

graduationRate = graduations / (launches − dev − stillTrading)

stillTrading are launches whose curve has neither complete() nor graduated(). A launch that completed and then timed out into refund mode stays in the denominator — it had its chance and did not take it, and excluding it would flatter the rate.

Published alongside the rate
idMeaning
graduationsNumerator
launchesEligibleDenominator, as defined above
launchesStillTradingExcluded from the denominator
launchesRefundingIncluded in the denominator; refundOpen() == true
launchesDevExcluded entirely

Do not use a creator’s own graduated count for the protocol figure. CreatorRegistry.statsOf(creator).graduated is per creator, is stale by construction, and is dated from the oldest page of a multi-page sync. It is the right source for a creator’s tier and the wrong one for a protocol rate — see creators, KOLs and referrers.

netRaisedWei — per launch#

netRaisedWei = virtualEthReserve() − initialVirtualEthReserve()      // saturating at 0

Not realEthReserve(). The two agree while a curve trades and diverge permanently at graduation, where realEthReserve is zeroed and the virtual reserves are not. This is metric id 2 and is exactly what the outcome oracle and the creator registry read.

For the same reason BondingCurve.progressBps() reads 0 for a graduated launch — it divides by the zeroed realEthReserve. The oracle forces 10000 once graduated() is true, and every published progress figure must do the same.

tokensBurned#

Three burn sites, two of which emit a burn event
SiteEventNotes
Donation burn at graduationBondingCurve.DonationBurned(uint256 amount, uint256 totalSupplyAfter)Tokens sent to the curve by anyone, burned rather than pooled.
Locker fee burn, every collectionLaunchLiquidityLocker.FeesCollected.tokensBurnedNow, lifetime tokensBurnedThe entire token leg of a graduated pool’s fees is burned.
Adapter mint dust at graduationNoneVisible only as ERC-20 Transfer(adapter, address(0), value).

Every burn in this system lowers totalSupply() and re-reads it to prove so, reverting with BurnDidNotReduceSupply(token, amount, before, after) if the supply did not move. No figure here is derived from a balance parked at a dead address.