Candor Labs
Report 02 · 31 August 2026
199 positions verified on-chain88 pools19 earned nothing

The Blind Spot

A third of liquidity positions in pools DefiLlama does not track earned no fees at all. In the pools it tracks with published yields, none did.

Figures computed 31 August 2026 and fixed at that date — later builds do not recompute them.

Pools DefiLlama tracks, with published yields
0 / 114
Positions in established pools with a published APY over the hold window. None collected a single fee.
→
Pools it does not track
16 / 45
Positions in long-tail pools, invisible to the dashboards, that earned exactly nothing.

DeFi's free data layer has an edge. Pools below its thresholds are not listed, so for practical purposes they do not exist — not to the dashboards, not to the screeners, not to anyone deciding where to put money. This report is about what is on the other side of that edge.

We reconstructed 199 liquidity positions from Base chain logs — every one an ordinary Uniswap v3 position, opened and closed by its owner, held at least seven days, with fees collected and counted from the Collect events rather than estimated. Then we asked a question the position data can answer and the advertised data cannot: how many earned nothing at all?

Positions earning zero fees, by whether DefiLlama tracks the pool · n = 199
13.333326.666740%00.0%Tracked, with APY data (established)0 of 1147.5%Tracked, no APY in the hold window3 of 4035.6%Not tracked at all (long-tail)16 of 45
Each bar is the share of positions in that group that collected zero fees over a hold of seven days or more. Sample sizes are shown because they are the only thing that makes a bar worth reading.

The finding

Nineteen positions earned nothing. Sixteen of them were invisible.

Of 199 verified positions, 19 collected zero fees — not a small amount, zero. Split by whether DefiLlama tracks the pool at all, they do not distribute evenly. They barely distribute.

Group Positions Zero-fee Rate 95% interval
Tracked, with APY data in the hold window 114 0 0% 0 – 3.3%
Tracked, no APY datapoint in the window 40 3 7.5% 2.6 – 19.9%
Not tracked at all 45 16 35.6% 23.2 – 50.2%

Intervals are Wilson score, 95%. For the top row, where nothing at all happened in 114 tries, the plainer way to say the same thing is the rule of three: zero events in 114 observations puts the true rate at roughly 3 in 114, about 2.6%, as an upper limit.

The 19 zero-fee positions belong to 18 distinct owners. This is not one wallet's bad month.

How firm is 35.6%?

Not very, and it matters more that we say so than that a reader works it out.

Forty-five positions is not many. Measure a different forty-five long-tail positions and the answer would not come back at 35.6%; it would land somewhere in a band, and the honest width of that band is roughly 23% to 50%. So 35.6% is a marker inside that range, not a measurement of it. Anyone quoting this report should quote the range.

What barely moves is the comparison. The tracked group had zero zero-fee positions in 114, which caps its rate at about 3% however generously you draw the interval. The two ranges — 23–50% against 0–3% — do not overlap, do not touch, and are not close to touching. That holds even if you take the least flattering end of one and the most flattering end of the other.

The formal version: if the two groups were really the same, a split this lopsided would turn up about once in roughly 6 billion repetitions of the experiment (Fisher's exact test, two-sided, p = 1.8 × 10⁻¹⁰).

So the claim this report makes is the contrast, not the number. Positions in pools the free data cannot see fail to earn at a rate the tracked pools do not come near. How much higher is a question 45 positions cannot answer precisely, and we are not going to pretend otherwise.

Three attempts to kill it

A finding this clean is usually an artifact. We spent longer trying to break this one than producing it, and it is worth saying exactly how, because the failures are what make the number worth trusting.

Was it a measurement artifact — positions still open, fees not yet collected? No. All 19 were confirmed fully closed on-chain. The position lifecycle code was rewritten and re-run from scratch against a 20-position sample; it landed on identical birth and close blocks, difference of zero, 20 out of 20.

Was one actor inflating the count? No. The 19 positions span 18 owners with no shared transactions between them. Counting owners rather than positions moves the long-tail rate from 35.6% to 36.6% (15 of 41 owners) — the wrong direction for a single-actor explanation.

Was the timing cluster below confounding it? No. That cluster contains 20 positions, of which 12 earned zero fees and 8 earned fees normally. If the cluster were the cause, it would not contain a control group.

What we cannot explain

Twenty positions, nineteen unrelated owners, births spread across a month, each held for approximately 349,000 blocks — a spread of ±355, or 0.1%.

Every one is an ordinary self-signed mint() straight to the Nonfungible Position Manager. No shared router, no relayer, no wrapper contract, nothing linking the transactions. The openings are scattered. Something coordinates the closes, and we do not know what.

We are publishing this rather than removing it. It is disclosed here because it is real, it is checkable, and it is the kind of detail that gets dropped when the goal is a tidy story.

Method

Positions are identified by NFT token ID, never by wallet — a wallet can hold many positions and positions change hands. Each position is bound to its birth by the Transfer(0x0 → owner) event, and its fee income is summed from the Collect events it actually emitted. Nothing is inferred from balances.

Only positions held at least seven days are included. Shorter holds make zero-fee outcomes uninformative — a position open for an hour in a quiet pool earning nothing tells you about the hour, not the pool.

Each position's pool is then matched against the DefiLlama record in the Candor archive over the exact window the position was held, producing the three groups above. One position of 200 was excluded for exceeding the log-retrieval budget, leaving 199 across 88 distinct pools.

When these positions existed

Every position in the sample was opened between 24 March and 12 May 2026 and closed between 15 April and 27 May 2026 — a single nine-week window in spring 2026.

That window is the honest scope of the result. Dates are derived from block numbers against a known block-and-timestamp anchor at Base's two-second block interval; over this range that is accurate to within a few hours, so read them as calendar days rather than timestamps.

What this does not show