Candor Labs

Method

Linked from every report. One page, kept current.

Every number Candor Labs publishes comes from one of two records: a continuous log of what pools advertise, and a reconstruction from chain logs of what liquidity positions received. They are different measurements and are never mixed.

The advertised record

A snapshot of every pool tracked by DefiLlama is taken four times a day, at 02:51, 08:51, 14:51 and 20:51 UTC. Historical series are backfilled to the earliest date the source holds, which is February 2022.

The server runs on UTC and never observes local time. This is deliberate: a schedule expressed in a zone with daylight saving will, twice a year, either skip a run or execute one twice.

An hourly catch-up job collects if the most recent run is more than seven hours old or failed, and exits silently otherwise. Within a run, a network-class failure is retried to a maximum of four attempts in total — the first try plus three retries, backing off 30 s, then 120 s, then 300 s. A malformed payload fails immediately rather than being retried into the record. The attempt number is written to the run log, so a blip that was recovered stays visible instead of looking like an uninterrupted success.

Collection outcomes are published in full at /status/ — failures and gaps included.

The position record

Liquidity positions are reconstructed from Base chain logs.

eth_getLogs is capped at 10,000 blocks per call by the public endpoint, and the endpoint rate-limits, so retrieval paces itself adaptively. No archive node is required: mainnet.base.org serves state and logs back to genesis.

What is always excluded

Gas. Every position figure ignores transaction costs. Including them moves every result in the same direction — worse — so results are best read as an upper bound on what providers kept.

Impermanent loss is not netted against fees unless a report says so explicitly. Fee income and price outcome are reported as separate quantities.

Corrections

Errors that inflate a finding are the ones that survive review, so they are recorded here rather than quietly fixed.

This log covers two kinds of correction, not one. Corrections to figures — the arithmetic slipped. And corrections to claims about provenance, method, or what we collected — we described data differently from how it was actually gathered. The second kind is the more serious of the two, and it is logged here on the same terms.

The rule from here: every correction is dated on the day it is made. An undated entry means the date is not establishable — never that nobody bothered.

Every one of those corrections made the finding less interesting. That is the expected direction, and it is why single-pass results are not published.

Reproducibility

Two kinds of number appear on this site and they behave in opposite ways.

Archive counts — pool totals, observation totals, the collection log — are queried from the database every time the site is built, rather than typed in. A stale count is a build failure rather than an oversight.

Published findings are frozen. Each carries the date its figures were computed, and no later build recomputes it. A finding is a claim about a specific dataset at a specific moment: if it drifted silently, every citation of it would become wrong and the corrections log below would mean nothing. When a finding does change, it changes here, in public, with the old value shown.

If you want to check something, ask for the underlying rows: contact@candorlabs.xyz.