Vesting contracts, and what they still hold
One ENS lock holds 45.59% of supply, and finished vesting on 4 Nov 2025. Nobody has moved it. A register of token vesting, lock and emission contracts, read directly from Ethereum — the unit is a contract and the state it is in, not a calendar of events.
Every on-chain reading below — balances, rates, allowances, schedule dates — is
an eth_call at one stated block, not a date copied from an announcement. The
forward figures are the only projections: totals over the next 7 to 365 days
and the date an allowance would be spent, each a published rate run forward in time. Where
those same readings set a limit the total stops there; where they date a step-down but not its
size, the total is marked as an upper bound instead.
The on-chain amounts were read at block 25,758,549, — they change only when this register is re-read, not every minute. The USD values beside them are struck at the current mark, which is why the freshness pill above moves while these figures do not.
Unlocked, not withdrawn
Schedules that have finished with the tokens still in the contract. Nothing is scheduled and nothing will be announced: every token still in these contracts can be claimed today, at a moment chosen by whoever it is owed to.
| Token | Contract | Held now | Share of supply | Unlocked since | Days of volume to absorb Hyperliquid volume | Provenance |
|---|---|---|---|---|---|---|
| ENS | DAO treasury lock0xd7a029db2585553978190db5e85ec724aa4df23f | 45,593,657 | 45.59% | 4 Nov 2025 330 days | — | Contract-verified address found on-chain, not in a document |
| CRV | pre-CRV liquidity providers0x575ccd8e2d300e2377b43478339e364000318e2c | 10,302,751 | 0.43% | 13 Aug 2021 1,874 days | 0.2 | Contract-verified |
The contract publishes the schedule but not the amount originally locked — there is no getter for it — so the figure here is the balance it held at the stated block. The four-year linear unlock finished on 4 Nov 2025, which means all of it is unlocked and none of it has moved. The address is NOT taken from a document. ENS's own docs name the token but not this contract, so it was identified by reading the chain: it exposes token(), unlockBegin(), unlockCliff() and unlockEnd(), its token() returns the ENS token, and it holds the share of ENS supply shown in its row. That combination cannot be coincidental, and every step of it is reproducible with an RPC endpoint — but the provenance of the ADDRESS is on-chain inference, not a primary source, and that is a weaker claim than the other rows here make.
The one-year escrow for liquidity providers who were active before CRV existed finished on 13 Aug 2021. At the stated block the contract still held 10,302,751 CRV of the 151,515,152 it was funded with — claimable by their recipients at any moment, with nothing scheduled and nothing to announce. This row did not exist until the register started reading balances rather than dates.
Each bar is what one contract still holds as a share of its token’s total supply, read from the chain at a stated block rather than from an announcement. These schedules have all finished: nothing here is waiting for a date, and every one of these amounts can move today. The raw amounts are in the table above. They do not compare across tokens: ENS holds 4.4 times CRV’s amount and 107 times its share of supply, because CRV’s total supply is 24 times ENS’s.
The four states a contract can be in
Only the first of these is something a calendar can represent. The other three are what you find when you read the balance as well as the schedule, and two of them were discovered by doing exactly that — the register did not have them until it stopped trusting dates.
| State | What it means | Contracts |
|---|---|---|
| Releasing now | The contract is paying out at a rate it publishes on-chain, and the last reading shows what it pays with: CRV mints new supply. This is the only state a conventional unlock calendar can represent. | 1 |
| Unlocked, not withdrawn | The schedule has finished and the tokens are still sitting in the contract. Every one of them is withdrawable today, on no notice and with no announcement. There is no date to put in a calendar, so calendars show nothing here. | 2 |
| Rate published, nothing behind it | The contract publishes a forward emission rate but holds no balance to pay it. Read the rate alone and you forecast supply that cannot arrive. | 1 |
| Finished and emptied | Schedule complete and the balance is zero — confirmed by reading the balance, not assumed from the date having passed. The distinction between this and 'unlocked, not withdrawn' is invisible without an on-chain read, and it is the difference between nothing and as much as 45.59% of a supply. | 4 |
These counts cover 8 of the 9 contracts. Aave Safety Module is past what the last reading covers, and is explained under Releasing now.
Rate published, nothing behind it
A contract that publishes a forward rate is not the same as a contract that can pay it. These publish a rate and hold nothing, so anything that reads the rate and multiplies by time is forecasting supply that cannot arrive.
| Token | What the contract publishes | Rate | Owed on paper | Balance |
|---|---|---|---|---|
| COMP | COMP drip to the Comptroller0x2775b1c75658be0f640272ccb8c72ac986009e38 | 0.5 / block ≈ 3,600 a day | 3,259,611 32.60% of supply | 0 |
The clearest case on this page for why a published rate is not a forecast. dripRate() returns 0.5 COMP per block, about 3,600 a day, and has done since block 10,229,427.
By the stated block, 25,758,549, the contract’s own arithmetic says 7,764,561 COMP should
have been dripped, and dripped() says 4,504,950 actually was. The difference, 3,259,611 COMP or 32.60% of
total supply, is what the contract owed on paper at that block, and every block since adds 0.5 COMP more. Its balance at that block was zero, so none of it could move.
What this does not say: This does not say COMP distribution has stopped. Distribution is governed by the Comptroller, which governance can fund by other routes; what is readable here is only that THIS contract publishes a rate it cannot pay. Reservoir.drip() transfers min(rate × blocks elapsed − already dripped, its own balance). With a zero balance that minimum is zero regardless of the rate.
Releasing now
Contracts paying out right now, at a rate each one publishes on-chain. This is the only part of the register that answers "how much over the next N days", so it is the only part with a horizon control.
| Token | Event | Over 30 days | Share of supply | Days of volume to absorb Hyperliquid volume | Provenance |
|---|---|---|---|---|---|
| CRV | Protocol emission, epoch 6 266,197 CRV/day | 7,985,908 | 0.33% | 0.1 | Contract-verified |
Not in this table: Aave Safety Module. Its contract still publishes a rate, but the allowance read on 15 Aug 2026, 5,856 AAVE, would have been spent by 23 Sept 2026 at its published 150 AAVE a day. Claims can lag what has accrued and governance can raise an allowance, so whether it is still paying is not known until the register is re-read, and until then it is counted in no state.
Finished and emptied
Finished, and the tokens have gone. These rows are here because the only way to tell them apart from the overhang above is to read the balance — the dates look identical, but these hold nothing and those above hold as much as 45.59% of a supply.
| Token | Contract | Original amount | Share of supply | Ended | Held now |
|---|---|---|---|---|---|
| UNI | Treasury Vester 10x4750c43867ef5f89869132eccf19b9b6c4286e1a | 172,000,000 | 17.20% | 18 Sept 2021 | 0 |
| UNI | Treasury Vester 20xe3953d9d317b834592ab58ab2c7a6ad22b54075d | 129,000,000 | 12.90% | 18 Sept 2022 | 0 |
| UNI | Treasury Vester 30x4b4e140d1f131fdad6fb59c13af796fd194e4135 | 86,000,000 | 8.60% | 18 Sept 2023 | 0 |
| UNI | Treasury Vester 40x3d30b1ab88d487b0f3061f40de76845bec3f1e94 | 43,000,000 | 4.30% | 17 Sept 2024 | 0 |
All four vesters point at the same recipient, 0x1a9c8182c09f50c8318d769245bea52c32be35bc. Their schedules were already on file; what was NOT on file was whether the tokens had actually left, because the data recorded dates and not balances. All four read zero: 430,000,000 UNI, vested and withdrawn. That is the honest opposite of the ENS row, and neither could be told from the other without reading the chain.
Days of volume — the column that matters most
An unlock is only meaningful against the liquidity that has to absorb it. Ten million tokens into a market trading a hundred million a day is noise; the same ten million into a market trading two million a day is a week of selling pressure. That ratio is the column above: tokens × mark price, divided by 24-hour traded volume, both from the same snapshot every other page here reads. The volume is Hyperliquid's perpetual volume alone, one venue's, so the days read longer than the whole market's volume would make them.
It fills only where this site already carries a Hyperliquid perpetual for the token, because that is the only volume series it collects. Raising the published set to 55 coins is what put CRV and AAVE on both sides of that gap. For anything else the cell stays blank rather than borrowing a number from a source the rest of the page would not accept.
How to read the provenance badges
| Provenance | What it means | Rows |
|---|---|---|
| Contract-verified | Read from the contract by eth_call at the stated block. Reproducible by anyone with an RPC endpoint. | 9 |
| Project-published | From the project's own repository, docs or governance record. Authoritative but not independently checkable on-chain. | 0 |
| Aggregator-sourced | From a third-party dataset. Fastest to assemble and the weakest evidence: if a date slips, nothing in the data says so. | 0 |
Every row on this page carries the strongest provenance for its on-chain figures. That is not a boast — it is what happens when the weaker sources are unavailable, and it is why the register is 9 contracts deep rather than several hundred wide. One row is weaker on a different question, and says so in its own Provenance cell: the ENS address was identified by reading the chain rather than from a document, which is a weaker claim about the ADDRESS than the other rows make, and it is said out loud rather than hidden.
Contract-verified emission detail
Aave Safety Module runs on a schedule the contract itself publishes: 0.001736 AAVE per second, which is 150 AAVE a day — emissionPerSecond, fixed until governance changes it. The contract publishes an emissionPerSecond that is constant until governance votes to change it, so the daily figure is exact rather than projected. This is NOT new issuance. AAVE's supply is capped at 16,000,000 and fully minted; these tokens move out of the Ecosystem Reserve to stakers, so they are supply arriving on the market rather than supply being created. DISTRIBUTION_END is set to 2123, which is a sentinel meaning 'no end', so the real limit is not the date — it is the allowance the Reserve has granted the staking contract, which is read here too. The date that allowance would be spent at the current rate is the nearest thing to a forward horizon the chain gives.
Read from 0x4da27a545c0c5b758a6ba100e3a049001de870f5 at block 25,758,549 using
REWARD_TOKEN(), STAKED_TOKEN(), REWARDS_VAULT(), assets(address), DISTRIBUTION_END(), allowance(vault,stkAAVE).
Available supply 16,000,000, total supply 16,000,000, both read on-chain.
At that block the vault was approved to spend 5,856 AAVE, 39 days
at this rate. Drawn at exactly that rate from the read, it would have been spent by 23 Sept 2026.
That date is an assumption, not a reading: claims can lag what has accrued and governance can raise the allowance, so the contract may still be paying, and no forward total is printed until the register is re-read.
DISTRIBUTION_END reads 30 Nov 2123, which is a sentinel, not a plan.
Curve DAO runs on a schedule the contract itself publishes: 3.080983 CRV per second, which is 266,197 CRV a day — rate(), stepping down at the end of every epoch (epoch 6, 365 days from 12 Aug 2026 to 12 Aug 2027). rate() returns tokens per second and is held constant until the current epoch ends and steps down on-chain. The end of the epoch is read too: future_epoch_time_write() is not a view function, but called with eth_call it changes nothing on-chain and returns the moment the current epoch ends. Emission is algorithmic: the contract mints at a fixed rate that steps down at the end of every epoch. Unlike discretionary vesting, the rate to the end of the current epoch is readable today.
| Next | CRV emitted | Share of total supply |
|---|---|---|
| 7 days | 1,863,378 | 0.08% |
| 30 days | 7,985,908 | 0.33% |
| 90 days | 23,957,723 | 0.99% |
| 365 days | up to 97,161,876 | up to 4.03% |
Read from 0xd533a949740bb3306d119cc777fa900ba034cd52 at block 25,758,549 using
rate(), start_epoch_time(), future_epoch_time_write(), mining_epoch(), available_supply(), totalSupply().
Available supply 2,420,239,053, total supply 2,409,939,735, both read on-chain.
rate() steps down when epoch 6 ends on 12 Aug 2027; the 365-day row runs past that date, so it is an upper bound — the rate after the step is lower, and this register has not read it.
Addresses that carry no readable schedule
Named in project material as allocations, but exposing nothing to read. Listed because the absence is the finding: a balance with no schedule is not the same as no balance, and it is not the same as a balance with a date either.
| Address | Held now | Why it has no row above |
|---|---|---|
Curve — Community Funds0xe3997288987e6297ad550a69b31439504f513267 | 845,144 CRV | Holds 845,144 CRV and implements none of the VestingEscrow getters. It is an address with a balance, not a schedule: nothing about a release date is readable from it. The balance is real and the timing is unknowable, which is a different statement from either 'no unlock' or 'an unlock on some date'. |
Curve — Investors 10xf22995a3ea2c83f6764c711115b23a88411cafdd | 0 CRV | Labelled as an investor allocation and exposes no schedule to read. Its balance is now zero, so whatever it held has already moved — but with no getters there is no way to say when, or under what terms. |
Lido TRP — per-recipient escrows0xDA1DF6442aFD2EC36aBEa91029794B9b2156ADD0 | not enumerable | The factory and the prototype are both readable, and the prototype returns a coherent (empty) schedule, so the interface is right. But each recipient's schedule lives in a separate clone whose address only appears in a factory event. Enumerating them needs eth_getLogs over a wide block range, and free RPC endpoints cap that at 50 blocks — about ten minutes of chain. The data exists on-chain and is out of reach at this cost level. |
What would extend the register
api.llama.fi/emissions answers 402 Payment Required — "Upgrade to the paid API plan". Their adapters
repository is not public, and the one that is carries no licence at all, which under default
copyright grants nothing. A public storage bucket does serve the same data, but reaching for
it to route around a 402 is circumventing an access control, not accepting an offer. So
breadth is a purchase decision. Depth — reading each contract's balance rather than its
published schedule — is what produced the finished-but-unwithdrawn rows above, and it costs
only time. Whether anyone else publishes them is not something this site has measured, so
it is not claimed.
| Route | Cost | What it yields | Provenance it earns |
|---|---|---|---|
| DefiLlama Pro | A paid API subscription. Their emissions endpoint is explicitly gated behind it. | Several hundred protocols at once, with forward dates. The fastest route to breadth by a wide margin — and forward dates only, so it would not have found a single row in the overhang section above. | Aggregator-sourced |
| Manual curation | Roughly 15–25 minutes per contract to find a primary source for the address, derive the getters and read it, at about a one-in-three hit rate. | A short list, strongest where it matters. Reading balances as well as schedules is how it found both finished contracts above that still hold tokens — the oldest ended on 13 Aug 2021 and still holds 10,302,751 CRV. | Contract-verified |
| Archival RPC | An endpoint with unrestricted eth_getLogs. Free providers cap it at 50 blocks, about ten minutes of chain. | Every factory-deployed escrow in one pass — the Lido case above and everything shaped like it. | Contract-verified |
The three are complementary rather than alternatives. Buying the aggregator feed adds breadth immediately at the weakest provenance; the archival endpoint reaches contracts that exist only as factory clones; curation is what reads a balance and notices that a finished schedule never emptied. The badge column is what makes running all three at once coherent instead of muddled.