This cp0x study tested whether treasury outflows computed automatically from public data can stand in for the spending that DAOs (decentralised autonomous organisations) report. The benchmark is 12 protocol-years of reported spending for Lido, Aave, Sky and Uniswap in 2023 to 2025, frozen with a sha256 hash before any outflow was computed. The primary transfer-based proxy (P1, Ethereum mainnet) misses the reported figure by a median factor of 2.21, against a pre-registered limit of 1.4, and only Lido has a median ratio inside the allowed band of 0.5 to 2. The primary balance-based proxy (B1, DefiLlama daily balances on all chains) covers only 9 protocol-years, below the required 10, with a median error factor of 2.12. Neither family passes, so by the frozen decision rule a planned cp0x study of how DAOs allocate resources continues as case studies. The gaps have structural causes that differ by protocol and that no scalable rule removes.
Key findings
- In this cp0x validation (Lido, Aave, Sky and Uniswap, 12 protocol-years, 2023 to 2025), the transfer-based treasury outflow proxy P1 differed from reported DAO spending by a median factor of 2.21 (median absolute log ratio 0.792 against a limit of 0.336).
- In the same study, the median ratio of P1 to reported spending was 6.36 for Uniswap, 2.52 for Aave, 1.55 for Lido and 0.15 for Sky, so only 1 of 4 protocols fell inside the allowed band of 0.5 to 2.
- In the same study, P1 matched the direction of change in reported spending in only 5 of 8 year pairs, with a Spearman rank correlation of −0.15.
- The balance-based proxy B1, built from DefiLlama daily treasury balances, covered only 9 of the 12 protocol-years because the balance series start in February 2023 (Sky in October 2023), and its median error factor was 2.12.
- In 2023 to 2025 the mismatch had structural causes, for example Uniswap DAO funding the Uniswap Foundation in tranches ($42.7M in 2023, about $138M of UNI in 2025) and Sky minting payments directly to recipients outside the treasury.
- A manually cleaned diagnostic version of the transfer proxy still had a median error of about 2.0 times (0.714 log points), so accurate on-chain spending figures would need address-by-address labelling of each protocol.
Study at a glance
| Item | Value |
|---|---|
| Question | Does an automatic treasury outflow track reported DAO spending well enough to use at scale? |
| Sample | 12 protocol-years in 4 protocols (3 each for Lido, Aave, Sky, Uniswap); 9 covered in family B; Olympus screened out |
| Period | 2023-01-01 to 2025-12-31 (Lido first unit May to December 2023) |
| Unit of returns | Not applicable; the unit of comparison is r = proxy outflow (USD) / reported spending (USD) |
| Benchmark or control | Realised spending from protocol or commissioned financial reports |
| Data sources | Routescan, DefiLlama treasury and coins APIs, DefiLlama-Adapters, protocol reports |
| Method | Two proxy families (transfers P, balances B) tested on accuracy, bias, direction of change and coverage |
| Pre-registration | Method frozen 2026-10-07T09:18:12Z, sha256 4dfa38a8…0815; benchmark frozen 2026-10-07T09:31:26Z, sha256 16882766…e9f6 |
| Independent review | Yes, 2026-10-07; one bug fixed and several explanations corrected, verdict unchanged |
| Main verdict | Both families fail; the planned study of DAO resource allocation becomes case studies and no new proxy is designed |
Question and motivation
A planned cp0x study asks how DAOs allocate resources and whether spending is followed by growth in fees, market share and token price. Public reports of realised spending for two years or more exist for only five of the sixty largest protocols in the sample. The only way to get spending data for a large sample would be to estimate it from on-chain treasury outflows.
Before building a study on that estimate, we tested it against the figures DAOs publish themselves, under rules frozen in advance.
Data
| Source | What was used | URL | Access date |
|---|---|---|---|
| Protocol financial reports | Realised spending, 12 benchmark rows | Lido forum, Aave Insights (TokenLogic), Steakhouse, Sky Frontier Foundation, Uniswap Foundation (exact URLs in data/reported_spending.csv) |
2026-10-07 |
| DefiLlama-Adapters | registries/treasury.js, commit 07a9a470, treasury address sets |
https://github.com/DefiLlama/DefiLlama-Adapters | 2026-10-07 |
| Routescan API | ERC-20 transfers, normal and internal transactions, blocks 16308190 to 24136052 | https://api.routescan.io/v2/network/mainnet/evm/1/etherscan/api | 2026-10-07 |
| DefiLlama coins API | Daily USD prices by token address | https://coins.llama.fi | 2026-10-07 |
| DefiLlama treasury API | Daily token units and USD values per chain | https://defillama.com/docs/api | 2026-10-07 |
The benchmark counts realised operating expenses, grants and contributor pay, including pay in own tokens, but not budgets. Cost of revenue, user incentives, buybacks and staking rewards are excluded when a report separates them. Calendar years are used where available, otherwise a reported period of at least 6 months.
Per-protocol benchmark choices were logged before any proxy total was seen (entry V2 of the change log CHANGES_R6V.md, cited below as CHANGES V1 to V13). Olympus had only budgets and one community-posted actual outside the window, so it has no unit.
Method
- The treasury set T is exactly the address list of the protocol's DefiLlama treasury adapter, so that the measure can scale.
- Family P (transfers, Ethereum only). P0 is every outflow from T to an address outside T, valued at the nearest DefiLlama daily price within 3 days. P1, the primary variant, removes outflows in transactions where T also receives value (swaps, deposits, wraps, claims), burns, and outflows to contracts that are not multisigs (checked through a public Ethereum RPC, or remote procedure call, endpoint). P1c is P1 without the protocol's own token.
- Family B (DefiLlama balances, all chains). B1, the primary variant, sums the net daily outflow, max(0, −sum of token value changes). B0 sums negative token changes gross. A unit enters B only if the series covers the whole period.
- For each unit, r = proxy / reported, and the error is |ln r| in log points (absolute natural log of the ratio).
- C1 accuracy requires median |ln r| ≤ ln 1.4, about 0.336.
- C2 no bias requires each protocol's median r to lie in [0.5, 2] for at least 80 percent of protocols, which with 4 protocols means all 4 (CHANGES V3).
- C3 dynamics requires the direction of change between consecutive units to match in at least 2/3 of pairs, and is not evaluable with fewer than 3 pairs.
- Coverage requires at least 4 protocols and 10 units, otherwise the family fails. A family passes only if all applicable criteria hold.
- If neither family passes, the planned resource allocation study becomes 5 to 10 case studies with no new proxy. Diagnostic variants cannot change the verdict.
Results
Unit-level comparison
The table shows reported spending and the two primary proxies for each protocol-year, in millions of USD, with the ratio r.
| Protocol | Period | Reported, USD M | P1, USD M | r (P1) | B1, USD M | r (B1) |
|---|---|---|---|---|---|---|
| Lido | May to Dec 2023 | 12.5 | 12.9 | 1.03 | 19.5 | 1.56 |
| Lido | 2024 | 40.9 | 63.4 | 1.55 | 80.1 | 1.96 |
| Lido | 2025 | 40.7 | 63.0 | 1.55 | 70.3 | 1.73 |
| Aave | 2023 | 12.2 | 16.2 | 1.33 | not covered | |
| Aave | 2024 | 23.9 | 72.2 | 3.02 | 87.2 | 3.65 |
| Aave | 2025 | 25.1 | 63.1 | 2.52 | 153.8 | 6.13 |
| Sky | 2023 | 53.7 | 8.1 | 0.15 | not covered | |
| Sky | 2024 | 69.0 | 35.7 | 0.52 | 146.6 | 2.12 |
| Sky | 2025 | 73.7 | 4.2 | 0.06 | 517.0 | 7.01 |
| Uniswap | 2023 | 6.7 | 42.7 | 6.36 | not covered | |
| Uniswap | 2024 | 15.7 | 17.0 | 1.08 | 21.6 | 1.37 |
| Uniswap | 2025 | 20.7 | 156.3 | 7.55 | 810.0 | 39.13 |
Ratios range from 0.06 to 7.55 for P1 and from 1.37 to 39.13 for B1. Errors of several times in both directions are exactly the case the frozen rule treats as closing the quantitative design.
Criteria for the primary variants
The table shows each frozen criterion for P1 and B1 from data/verdict.json.
| Criterion | Threshold | P1 | B1 |
|---|---|---|---|
| Coverage | ≥ 10 units, ≥ 4 protocols | 12 units, 4 protocols (pass) | 9 units, 4 protocols (fail) |
| C1 median |ln r| | ≤ 0.336 | 0.792, factor 2.21 (fail) | 0.754, factor 2.12 (fail) |
| C2 protocols in [0.5, 2] | 4 of 4 | 1 of 4 (fail) | 1 of 4 (fail) |
| Protocol median r | Aave 2.52, Lido 1.55, Sky 0.15, Uniswap 6.36 | Aave 4.89, Lido 1.73, Sky 4.57, Uniswap 20.25 | |
| C3 direction matches | ≥ 2/3 of pairs | 5 of 8 (fail) | 5 of 5 (pass) |
| Spearman correlation | descriptive | −0.15 | 0.47 |
| Verdict | all criteria | fail | fail |
P1 fails all three quality criteria. B1 tracks the direction of change but fails coverage, accuracy and bias.
Diagnostic variants
The table shows diagnostic variants that explain the outcome but cannot change the verdict.
| Variant | Units | Median |ln r| | Error factor | Protocols in [0.5, 2] | Spearman |
|---|---|---|---|---|---|
| P0 gross outflow | 12 | 1.93 | 6.89 | 0 of 4 | 0.39 |
| P1c without own token | 12 | infinite | infinite | 2 of 4 | 0.00 |
| B0 gross balance outflow | 9 | 1.065 | 2.90 | 0 of 4 | 0.45 |
| B1 without own token | 9 | 0.916 | 2.50 | 1 of 4 | 0.90 |
| Manually cleaned P1 | 12 | 0.714 | about 2.0 | 2 of 4 (Lido 1.55, Sky 1.97) | not computed |
P1c is infinite because Sky and Uniswap send no non-own-token value under the P1 rules. The factor of about 2.0 for the manual variant is our conversion of 0.714 log points. Its rules were set after seeing P1, and its Sky figures reflect treasury moves rather than payments (CHANGES V10).
Why the proxy fails, protocol by protocol
The causes below are the corrected explanations from CHANGES V12 and the independent review. Each is structural.
| Protocol | Error | Corrected explanation |
|---|---|---|
| Lido | P1 about 1.55 times reported in 2024 and 2025 | Committee and foundation multisigs are funded monthly near actual costs, the best fit of the four. The excess is pre-funding plus LDO sent to a 4-of-9 Safe multisig (not a vesting contract) before token pay is booked. |
| Aave | P1 1.33 to 3.02 times reported | The treasury set includes the Ecosystem Reserve, which pays Safety Module rewards ($12.3M, $39.8M and $50.2M of P1 in 2023 to 2025). Real aToken (interest-bearing deposit token) payments are removed because each carries a small interest mint to the Collector in the same transaction. Stream withdrawals explain only $0.47M. |
| Sky | P1 0.06 to 0.52 times reported | Spells mint DAI or USDS directly to recipients, so payments never appear as treasury outflows. Large treasury operations, such as $663.7M of USDC sent out in 2024 after a PSM (Peg Stability Module) swap, are correctly removed. |
| Uniswap | P1 6.36 and 7.55 times reported in 2023 and 2025 | The DAO funds the Foundation in tranches, $42.74M of UNI in October 2023 and $137.98M of UNI in March 2025, while the Foundation spends $6.7M to $20.7M a year from wallets outside the set. The 2024 match (r 1.08) is a coincidence. |
Family B also picks up adapter artefacts (CHANGES V13). The Sky adapter does not track USDS, so DAI to USDS conversions count as outflows ($104.9M in 2024, $216.5M in 2025). Lido shows a $9.2M sUSDS conversion, and B counts Uniswap's 100M UNI burn in December 2025 ($600.5M).
Robustness and replication
The table lists checks run by the independent reviewer and the authors.
| Check | Outcome | Verdict changed? |
|---|---|---|
| De-duplication bug fixed (V5) | Sky 2024 P1 from $35.28M to $35.68M; P1 median |ln r| from 0.797 to 0.792 | No |
| Rule-based fix for the aToken interest mint | Median |ln r| 0.556, 2 of 4 in band (Aave 3.80, Sky 0.82); Sky 2025 rises to $144.6M through SKY mints | No |
| Benchmark alternatives (Uniswap 2023 $7.08M, Sky 2025 $67M) | Median |ln r| 0.792; Uniswap median r 6.04 | No |
| Family B without Sky conversions and the Uniswap burn | Still 9 units; Uniswap about 10 times, Aave 4.9 times | No |
| Derived Olympus unit, Jan 2023 to Jan 2024, $5.163M (V11) | B reaches 10 units, but Olympus r is about 25 and C2 is 1 of 5 | No |
| Price matching and recipient spot checks (21 addresses) | Prices at most 1 day off; no misclassification or decimal errors | No |
No tested correction brought either family close to passing.
Limitations
- The benchmark is uneven. Aave's rows have no published methodology, Sky's 2023 and 2024 to 2025 figures come from different firms, Lido 2023 covers eight months of the Contributors Group only, and Uniswap excludes staff pay in UNI.
- Family P covers Ethereum only. The non-Ethereum share of the DefiLlama treasury (yearly mean of daily shares) was 16.6, 10.9 and 10.4 percent for Aave in 2023 to 2025, 0.1 to 0.8 percent for Lido, and zero for Sky and Uniswap.
- These benchmark and coverage inaccuracies move figures by tens of percent, while the gaps are factors of two or more, and the reviewer found none that changes the verdict.
- The sample is 12 protocol-years of 4 unusually transparent DAOs. The result shows that this proxy did not track reported spending here, not that no future on-chain method could work.
What this means for DAOs
A treasury outflow mixes funding of intermediaries (foundations, committees, contractor multisigs), payments to users and stakers, and treasury operations. No rule that works without manual labelling separates them, and in some protocols spending never passes through the treasury.
DAO spending therefore cannot currently be measured from on-chain data across a large sample. The reliable source is a DAO's own financial report, and few DAOs publish one, so regular realised spending reports with a stated scope are what make spending assessable. This is not investment advice.
Frequently asked questions
Can on-chain treasury outflows be used to measure DAO spending?
Not on this evidence. In this cp0x validation of Lido, Aave, Sky and Uniswap for 2023 to 2025, the best transfer-based proxy missed reported spending by a median factor of 2.21, against a limit of 1.4, and the balance-based proxy by 2.12.
Why does the proxy overstate Uniswap spending?
Uniswap DAO pays the Uniswap Foundation in large tranches, $42.7M of UNI in October 2023 and about $138M of UNI in March 2025, while the Foundation spends $6.7M to $20.7M per year. The proxy measures the DAO's funding of the Foundation, not the Foundation's spending, giving ratios of 6.36 and 7.55.
Why does the proxy understate Sky spending?
Sky executive spells mint DAI or USDS directly to payment recipients, so payments never leave the treasury address DefiLlama tracks. Only MKR and SKY transfers are visible, and P1 captured 0.06 to 0.52 of Sky's reported spending in 2023 to 2025.
Was the test pre-registered?
The test was pre-registered, with the method and criteria frozen on 2026-10-07 with sha256 4dfa38a8…0815 before any proxy was computed, and the benchmark separately with sha256 16882766…e9f6.
Did manual cleaning fix the problem?
Manual cleaning did not fix it, since a manually cleaned transfer proxy still had a median error of about 2.0 times (0.714 log points). For Sky the manual rules picked up treasury moves, such as $663.7M of USDC in 2024, instead of payments.
Did the independent review change the result?
The independent review did not change the result. The reviewer found one bug, wrong explanations for Sky and Aave, and missing disclosures, all fixed or logged. The bug fix moved the P1 median absolute log ratio from 0.797 to 0.792, and the planned study of DAO resource allocation still proceeds as case studies under the pre-registered rule.
Data and code
All data, code, the frozen method and the review for this study are on GitHub.
| Repo path | Description | Rows | Key columns |
|---|---|---|---|
data/reported_spending.csv |
Frozen benchmark | 12 | protocol, period_start, period_end, amount_usd, source |
data/comparison.csv |
Benchmark joined with all variants | 12 | amount_usd, P0, P1, P1c, B1, B0, covered |
data/proxy_P.csv, data/proxy_B.csv |
Proxy totals per unit | 12 each | P0, P1, P1c / B1, B0, covered |
data/proxy_P_manual.csv |
Manual diagnostic variant | 12 | P_manual, r |
data/verdict.json |
Criteria for all variants | 6 variants | median_abs_ln_r, C1, C2, C3, PASS |
data/P_outflows_<protocol>.csv.gz |
Every treasury outflow, 4 files | 759 to 112,850 | hash, day, token, usd, swap_tx, rclass, p1 |
data/B_steps_<protocol>.csv.gz |
Daily token value changes, 5 files | 116 to 182,499 | day, chain, token, dv |
data/raw/, method/, code/ |
Raw DefiLlama files and hashes; frozen method, changes, review; scripts | n/a | n/a |
To reproduce the verdict, run python code/compare.py from the study folder; code/README.md gives the full pipeline.
Version history
| Version | Date | Change |
|---|---|---|
| Internal first computation | 2026-10-07 | Method and benchmark frozen, V1 to V4 logged before any proxy total; P1 median |ln r| 0.797, both families fail |
| Internal corrected version | 2026-10-07 | V5 to V13 after review (bug fix to 0.792, corrected explanations, disclosures); verdict unchanged |
| 1.0 | 2026-10-08 | First public English version |