verify

The claims,
read live.

Every figure on this page comes from calls fired just now, from your own browser, against a keyless public Ethereum node — not our infrastructure, so the check does not route through the thing it checks. Nothing is stored; reload and it is all read again.

Each claim opens to its receipts. Each receipt opens to the raw call and the bytes the chain returned.

FOR MACHINES

The same claims, written as procedures — a surface built for somebody else's agent to fetch, re-derive, and check against the chain itself. Nothing there asks to be taken on faith either.

/odinagents → /odindata →

The LP tokens of all sixteen Uniswap V2 pools were sent to the dead address. LP that reaches an address nobody holds keys to can never sign the withdrawal — removal is impossible by construction, for every pool, separately, below.

recipe · per pool: LP.balanceOf(0x…dEaD) read live; the burned share adds LP.balanceOf(0x…0000) — Uniswap parks its own MINIMUM_LIQUIDITY there at pool creation, equally keyless. share = burned LP ÷ LP.totalSupply(). the sink pool locks by a burn chain instead: 100% of its LP staked in spValhalla, and the spValhalla receipt itself burned at dEaD — both legs read live.
poolmechanismshare burned

Any sliver not burned is LP an outside provider added later and still holds — theirs to withdraw, and no part of the founding liquidity, whose burned LP can never move.

etherscan.io →

Contract ownership is renounced. No admin functions, no upgrade path, no governance to capture — the rules you read are the rules that run, for everyone, indefinitely.

recipe · eth_call owner() — selector 0x8da5cb5b — on the ODIN token contract. the zero address can hold no key, so no owner-gated function can ever be called again. renouncement is a one-way door.
contractcallreturned
ODIN owner() on 0xDfC5964141c018485b4d017634660f85aa667714
etherscan.io →

Fully diluted from the start: no emissions schedule, no team unlocks waiting offstage. There is no mint function, so minted was fixed at deploy — and every burn channel only rises, so circulating only falls. Burned is counted on three channels, the same construction the OS renders:

recipe · minted = totalSupply(), which never falls — burned tokens still count in it, which is why the subtraction is the honest statement. channel 1 = ODIN.balanceOf(dEaD). channel 2, the sink = the ODIN behind the burned pValhalla, valued at the live pod index (ODIN inside the pod ÷ pValhalla supply). channel 3, the curve floors = k ÷ cap in each fully-diluted pair: the paired reserve can never exceed its capped supply, so that much ODIN is stranded in the curve by arithmetic — caps read live, and a pair whose reserve exceeds its supposed cap voids the whole channel rather than shading it.
lineconstructionODIN
mintedtotalSupply() — fixed at deploy, no mint path
burned · dEaDODIN.balanceOf(0x…dEaD)
burned · sinkburned pValhalla × live pod index
burned · floorsΣ k ÷ cap over the capped pairs, expanded below
circulatingminted − burned
etherscan.io →

A one-of-a-kind pod — built with Peapods Finance, using OHM from Olympus — ties a share of supply into a deflationary loop, where ordinary market volatility tightens supply. The pod's wrap, unwrap and trade fees accrue to the pod itself, so each burned pValhalla claims a growing amount of ODIN.

recipe · pValhalla.balanceOf(dEaD) read live — burned pod tokens whose claim on the ODIN inside can never be exercised, only grow. pod index = ODIN held by the pod ÷ pValhalla supply: how much ODIN one pValhalla claims today. the displayed figures are the chain's, not ours.
readconstructionvalue
pVAL burnedpValhalla.balanceOf(0x…dEaD)
share of pVALburned ÷ pValhalla.totalSupply()
pod indexODIN in the pod ÷ pValhalla supply
ODIN in the sinkburned pValhalla × pod index
how it works →