Burn accounting
What counts as burned, what deliberately doesn't, and the double-count that's easy to walk into.
"How much ODIN is gone" sounds like one obvious number. It isn't, because ODIN leaves circulation by three routes and only one looks like a burn.
The definition#
The sum runs over fully diluted pairs only — ten of the sixteen.
All three are permanent, reached by arithmetic or by a transfer nobody can reverse. None depends on anyone's continued cooperation.
Why the curve floors count as burn
ODIN stranded behind a curve floor hasn't been transferred anywhere — it sits in a reserve, visible, apparently liquid. But buying it would require more counter-asset than will ever exist, so no sequence of transactions can retrieve it.
"Permanently unreachable" is the property that matters. A dead-address transfer and an arithmetic impossibility produce the same outcome; the second is just less obvious.
The categories stay distinct: when discussing the curve, the stranded quantity is still the liquidity floor — it's just no longer a separate ledger line.
What's excluded, and why#
WETH, WBTC, OHM, DAI, PAXG — all can still mint (WETH on deposit; WBTC, OHM, DAI carry mint selectors; PAXG is an upgradeable proxy).
No cap means no fixed number to divide by. Their floors are asymptotic, real but not countable — and a number you can't compute exactly doesn't belong on a ledger that claims to be exact.
Excluded because its ODIN is already counted on the pValhalla line. Including it would double-count.
The double-count#
The curve floors must not be counted twice.
The floors are the un-buyable part of the pools' own reserves. When measuring how fast the float is contracting, they're already inside the liquidity term — adding the canonical burn total on top double-counts, and the error grows because k only ratchets.
For contraction measurement, only what leaves the float basis counts: the dead address and pValhalla. Not the floors.
Plainly: there's a number for how much ODIN is permanently unreachable (all three categories) and a number for how fast the float is shrinking (two). Using the first where the second belongs inflates the result.
Two fences#
Unavailable is not zero. If a figure can't be computed for a window, the honest output is "unavailable" — not 0. True zeros genuinely happen, so substituting zero for missing data destroys the distinction between nothing happened and we don't know. Both surfaces enforce this.
A dead-address transfer is a staircase, not a rate. Burns arrive as discrete events with long gaps. Annualising a single step produces a meaningless number. The trailing measurement is a window, always — never a projection.
The honest scale#
Across a trailing year, the contraction is a fraction of a percent — permanent, one-way, and impossible to switch off, but small on any horizon shorter than years, and moving in steps rather than smoothly.
Both things are true at once. Presenting the first without the second is the overselling this documentation was rewritten to remove.
Verifying it#
Every component is public state:
| Component | Source |
|---|---|
| Dead address balance | Balance query on the ODIN contract |
| pValhalla locked position | Pod state — 33,333,333 at the dead address, plus accrued share |
| Curve floors | Pool reserves and counter-asset max supplies, per capped pair |
No archive node, no paid API. Current figures with derivations: /odindata.
Related: free float · the sink · the curve