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.
launches#
| derivation | Σ LaunchFactory.launchCount() over every factory in priorFactories[] plus the current one, minus launches whose TokenLaunched.dev == true |
|---|---|
| source | LaunchFactory.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.
| Field | What it actually is |
|---|---|
GraduatedToV4.ethAmount, GraduatedToV4.tokenAmount | What 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.ethAmount | The 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.
| id | Meaning |
|---|---|
graduations | Numerator |
launchesEligible | Denominator, as defined above |
launchesStillTrading | Excluded from the denominator |
launchesRefunding | Included in the denominator; refundOpen() == true |
launchesDev | Excluded 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 0Not 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#
| Site | Event | Notes |
|---|---|---|
| Donation burn at graduation | BondingCurve.DonationBurned(uint256 amount, uint256 totalSupplyAfter) | Tokens sent to the curve by anyone, burned rather than pooled. |
| Locker fee burn, every collection | LaunchLiquidityLocker.FeesCollected.tokensBurnedNow, lifetime tokensBurned | The entire token leg of a graduated pool’s fees is burned. |
| Adapter mint dust at graduation | None | Visible 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.