> ## Documentation Index
> Fetch the complete documentation index at: https://artemis.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Crypto protocol economics

> Separate the fees a protocol generates from the revenue it keeps, then build multiples on both

Two metrics look interchangeable and are not:

* **`FEES`** is what users pay to use the protocol
* **`REVENUE`** is the share of that which accrues to the protocol itself

The gap between them goes to liquidity providers, stakers or lenders. How wide it is decides whether a token has a claim on the business at all, so a multiple built on `FEES` and the same multiple built on `REVENUE` can rank the same set of protocols in a completely different order.

## Fee capture across protocols

```python theme={null}
import os
import requests
from collections import defaultdict

BASE = "https://data-svc.artemisxyz.com/v2/data"
KEY = os.environ["ARTEMIS_API_KEY"]
SYMBOLS = "hype,uni,aave,jup,morpho,ray"


def fetch(metrics, **extra):
    resp = requests.get(
        f"{BASE}/{metrics}",
        params={"symbols": SYMBOLS, "APIKey": KEY, **extra},
        timeout=120,
    )
    resp.raise_for_status()
    return resp.json()["series"]


ltm = defaultdict(dict)

# FEES and REVENUE are SUM metrics, so QUARTER buckets are true totals
for s in fetch("FEES,REVENUE", startDate="2025-07-01", endDate="2026-06-30", granularity="QUARTER"):
    if not isinstance(s["data"], list):
        continue
    ltm[s["display_name"]][s["metric"]] = sum(v for _, v in s["data"] if v is not None)

for s in fetch("MC", startDate="2026-08-06", endDate="2026-08-06"):
    if not isinstance(s["data"], list):
        continue
    values = [v for _, v in s["data"] if v is not None]
    if values:
        ltm[s["display_name"]]["MC"] = values[-1]

for name, m in sorted(ltm.items(), key=lambda kv: -kv[1].get("FEES", 0)):
    fees, revenue, mc = m.get("FEES", 0), m.get("REVENUE", 0), m.get("MC")
    print(
        f"{name:12} fees ${fees/1e6:7,.1f}M  revenue ${revenue/1e6:7,.1f}M  "
        f"capture {100*revenue/fees:5.1f}%  {mc/fees:5.1f}x fees  "
        f"{f'{mc/revenue:.1f}x revenue' if revenue else 'no revenue'}"
    )
```

Trailing twelve months to 2026-06-30, market cap on 2026-08-06:

| Protocol    | LTM fees   | LTM revenue | Capture | Market cap | MC / fees | MC / revenue |
| ----------- | ---------- | ----------- | ------- | ---------- | --------- | ------------ |
| Hyperliquid | \$1,020.7M | \$814.6M    | 79.8%   | \$12.49B   | 12.2x     | 15.3x        |
| Aave        | \$823.4M   | \$101.3M    | 12.3%   | \$1.38B    | 1.7x      | 13.7x        |
| Uniswap     | \$781.9M   | \$15.0M     | 1.9%    | \$2.51B    | 3.2x      | 167.5x       |
| Jupiter     | \$343.3M   | \$60.2M     | 17.5%   | \$0.60B    | 1.7x      | 10.0x        |
| Morpho      | \$194.6M   | \$0.0M      | 0.0%    | \$1.26B    | 6.5x      | n/a          |
| Raydium     | \$179.0M   | \$26.9M     | 15.0%   | \$0.16B    | 0.9x      | 6.1x         |

* **Capture varies by two orders of magnitude.** Hyperliquid keeps about 80 cents of every dollar paid to it. Uniswap keeps two. Morpho keeps nothing, and its fees accrue entirely to lenders.
* **The denominator decides the ranking.** Uniswap and Aave generate almost identical fees, but on revenue Uniswap is 167.5x and Aave 13.7x. On fees they are 3.2x and 1.7x. A comp table is only meaningful once you say which line you are paying for.
* **Morpho has no revenue multiple to compute.** Guard the division rather than assuming every protocol has a fee switch turned on.

## Whether the business is growing

The same call without the `sum()` gives the quarterly path, which is where the direction shows up:

```bash theme={null}
curl -s "https://data-svc.artemisxyz.com/v2/data/FEES,REVENUE?symbols=hype,uni&startDate=2025-07-01&endDate=2026-06-30&granularity=QUARTER&APIKey=$ARTEMIS_API_KEY"
```

| Quarter | Hyperliquid fees | Hyperliquid revenue | Uniswap fees | Uniswap revenue |
| ------- | ---------------- | ------------------- | ------------ | --------------- |
| Q3 2025 | \$328.9M         | \$289.3M            | \$273.3M     | \$0.0M          |
| Q4 2025 | \$282.9M         | \$228.9M            | \$222.5M     | \$0.3M          |
| Q1 2026 | \$209.1M         | \$151.0M            | \$144.9M     | \$9.1M          |
| Q2 2026 | \$199.9M         | \$145.3M            | \$141.2M     | \$5.6M          |

Hyperliquid's fees fell 39% across the year with revenue tracking them down at a steady ratio. Uniswap's fell 48%, but its revenue went from nothing to a small figure as its fee switch came on, so the two are moving in opposite directions on the line a token holder is paid from.

<Note>
  `granularity=QUARTER` labels each bucket with the quarter's **first** day, so Q3 2025 arrives as `2025-07-01`. Equity fundamentals label by fiscal period **end** instead. See [Equity comps](/docs/artemis-api/recipes/equities) if you are putting the two side by side.
</Note>

## Per-user economics

`FEES` over `DAU` gives revenue per active user, the same unit economics question you would ask of a listed company:

```bash theme={null}
curl -s "https://data-svc.artemisxyz.com/v2/data/FEES,DAU?symbols=hype,uni,aave&startDate=2026-07-01&endDate=2026-07-31&granularity=MONTH&APIKey=$ARTEMIS_API_KEY"
```

`FEES` is a `SUM` and `DAU` is an `AVERAGE`, so a `MONTH` bucket gives a monthly fee total over an average daily user count. Divide the fees by the days in the month before dividing by users. July 2026:

| Protocol    | Fees     | Average DAU | Fees per user per day |
| ----------- | -------- | ----------- | --------------------- |
| Aave        | \$28.15M | 9,558       | \$95.01               |
| Hyperliquid | \$58.35M | 63,021      | \$29.87               |
| Uniswap     | \$28.89M | 165,836     | \$5.62                |

Aave and Uniswap collected almost the same fees that month from user bases seventeen times apart. Ranking by users and ranking by fees per user give you two different pictures of the same three protocols.

For sector-wide rankings rather than a hand-picked basket, see [Sector leaderboards](/docs/artemis-api/recipes/sector-leaderboards).
