Valuation Lab
How much Intents volume would have to grow for buybacks and burn to cover issuance, and how likely that is if volume keeps behaving as it has. Conditional on stated assumptions; not a forecast.
Required annual growth of Intents volume
To reach CR = 1 in three years at 2.5% issuance, 30-day volume would have to grow 96.5% a year on the buyback basis; under the HSP-029 rate of 1.6% it would be 68.9%.
| Issuance | Take rate basis | V* per day | 1 year | 3 years | 5 years |
|---|---|---|---|---|---|
| 2.5% | Buyback wallet | $989.9M | +659% | +97% | +50% |
| 2.5% | All revenue | $654.3M | +402% | +71% | +38% |
| 1.6% (HSP-029) | Buyback wallet | $628.3M | +382% | +69% | +37% |
| 1.6% (HSP-029) | All revenue | $415.3M | +218% | +47% | +26% |
From a 30-day average of $130.4M per day; take rates 3.62 bp (buyback wallet) and 5.48 bp (all revenue) held at their current values.
Query and model
Computed by valuation.reverse_table (src/capture/models/valuation.py) from the tables below.
supply_daily (sql/supply_daily.sql)
-- supply_daily: end-of-day total supply and gas burn, in NEAR (yocto / 1e24).
-- Params: @start_date, @end_date (inclusive).
-- burnt_near = tokens_burnt of execution outcomes + receipt_conversion_tokens_burnt of transactions
-- (DATA_AUDIT.md check 2). Values are FLOAT64 in the source: ~15 significant digits.
WITH blk AS (
SELECT
block_date,
MAX(block_height) AS block_height,
MAX_BY(total_supply, block_height) AS total_supply
FROM `bigquery-public-data.crypto_near_mainnet_us.blocks`
WHERE block_date BETWEEN @start_date AND @end_date
GROUP BY block_date
),
eo AS (
SELECT block_date, SUM(tokens_burnt) AS burnt_receipts
FROM `bigquery-public-data.crypto_near_mainnet_us.execution_outcomes`
WHERE block_date BETWEEN @start_date AND @end_date
GROUP BY block_date
),
tx AS (
SELECT block_date, SUM(receipt_conversion_tokens_burnt) AS burnt_conversion
FROM `bigquery-public-data.crypto_near_mainnet_us.transactions`
WHERE block_date BETWEEN @start_date AND @end_date
GROUP BY block_date
),
circ AS (
SELECT
block_date,
MAX_BY(circulating_tokens_supply, computed_at_block_height) AS circulating_supply
FROM `bigquery-public-data.crypto_near_mainnet_us.circulating_supply`
WHERE block_date BETWEEN @start_date AND @end_date
GROUP BY block_date
)
SELECT
block_date AS `date`,
block_height,
total_supply / 1e24 AS total_supply_near,
(burnt_receipts + burnt_conversion) / 1e24 AS burnt_near,
burnt_receipts / 1e24 AS burnt_receipts_near,
burnt_conversion / 1e24 AS burnt_conversion_near,
circulating_supply / 1e24 AS circulating_supply_near
FROM blk
LEFT JOIN eo USING (block_date)
LEFT JOIN tx USING (block_date)
LEFT JOIN circ USING (block_date)
ORDER BY 1
fee_wallet_inflows_daily (sql/fee_wallet_inflows_daily.sql)
-- fee_wallet_inflows_daily (raw balances): end-of-day liquid NEAR balance of the revenue wallets. -- Params: @start_date, @end_date (inclusive), @wallets (ARRAY<STRING>). -- ft_balances_daily has no block_date column; its partition column is epoch_date, so the date -- filter is on epoch_date (documented exception to CLAUDE.md rule 2). liquid is in NEAR units. -- Daily changes are derived in Python (capture.extract.fee_wallets). SELECT epoch_date AS `date`, account_id AS wallet, 'NEAR' AS token, liquid AS balance_end FROM `bigquery-public-data.crypto_near_mainnet_us.ft_balances_daily` WHERE epoch_date BETWEEN @start_date AND @end_date AND account_id IN UNNEST(@wallets) ORDER BY 1, 2
price_daily (HTTP API)
https://api.coingecko.com/api/v3/coins/near/market_chart/range
defillama_intents_daily (HTTP API)
https://api.llama.fi/summary/dexs/near-intents; https://api.llama.fi/summary/fees/near-intents; https://api.llama.fi/summary/fees/near-intents?dataType=dailyRevenue; https://api.llama.fi/summary/fees/near-intents?dataType=dailyHoldersRevenue
- supply_daily.parquet · BigQuery public dataset · 2025-05-10 to 2026-11-01 · pulled 2026-11-02T03:40:33Z · sha256 382b732b
- fee_wallet_inflows_daily.parquet · BigQuery public dataset · 2025-11-07 to 2026-10-31 · pulled 2026-11-02T03:40:35Z · sha256 b32041f1
- price_daily.parquet · CoinGecko API · 2025-11-04 to 2026-11-01 · pulled 2026-11-02T03:43:33Z · sha256 48afd3b4
- defillama_intents_daily.parquet · DefiLlama API · 2024-12-10 to 2026-10-30 · pulled 2026-11-02T03:43:25Z · sha256 ae50ca9a
Monte Carlo of the coverage ratio, 60 months
If volume keeps its historical volatility but stops trending (flat), 28% of 10,000 paths have CR ≥ 1 in month 60 at 2.5% issuance. The other two scenarios carry the launch-phase growth and imply far larger volumes, shown under each panel.
- P(CR≥1), m12
- 9%
- P(CR≥1), m36
- 21%
- P(CR≥1), m60
- 28%
- Volume implied, m12
- $118.8M/d (0.9x)
- Volume implied, m36
- $136.1M/d (1.0x)
- Volume implied, m60
- $145.3M/d (1.1x)
Median first month with CR ≥ 1: month 59
- P(CR≥1), m12
- 33%
- P(CR≥1), m36
- 59%
- P(CR≥1), m60
- 61%
- Volume implied, m12
- $651.4M/d (5.0x)
- Volume implied, m36
- $2.67B/d (20.5x)
- Volume implied, m60
- $3.93B/d (30.1x)
Median first month with CR ≥ 1: month 15
- P(CR≥1), m12
- 45%
- P(CR≥1), m36
- 96%
- P(CR≥1), m60
- 99.7%
- Volume implied, m12
- $1.18B/d (9.0x)
- Volume implied, m36
- $131.94B/d (1011.8x)
- Volume implied, m60
- $13.8T/d (105813.6x)
Median first month with CR ≥ 1: month 12
Growth sample: 16 monthly changes from 2025-07, drawn in 3-month blocks (14 blocks). Mean monthly log growth 0.191; from 2025-12 on it is 0.006 (11 months). The historical scenario is driven by the launch phase.
Month-0 check: at the latest price the model starts at CR 0.144; at the mean price of the same 30 days ($4.92) it gives 0.121, against a measured 0.122. The gap is the price move inside the window.
Query and model
Computed by valuation.run_scenarios (block bootstrap, seed in config) from the tables below.
supply_daily (sql/supply_daily.sql)
-- supply_daily: end-of-day total supply and gas burn, in NEAR (yocto / 1e24).
-- Params: @start_date, @end_date (inclusive).
-- burnt_near = tokens_burnt of execution outcomes + receipt_conversion_tokens_burnt of transactions
-- (DATA_AUDIT.md check 2). Values are FLOAT64 in the source: ~15 significant digits.
WITH blk AS (
SELECT
block_date,
MAX(block_height) AS block_height,
MAX_BY(total_supply, block_height) AS total_supply
FROM `bigquery-public-data.crypto_near_mainnet_us.blocks`
WHERE block_date BETWEEN @start_date AND @end_date
GROUP BY block_date
),
eo AS (
SELECT block_date, SUM(tokens_burnt) AS burnt_receipts
FROM `bigquery-public-data.crypto_near_mainnet_us.execution_outcomes`
WHERE block_date BETWEEN @start_date AND @end_date
GROUP BY block_date
),
tx AS (
SELECT block_date, SUM(receipt_conversion_tokens_burnt) AS burnt_conversion
FROM `bigquery-public-data.crypto_near_mainnet_us.transactions`
WHERE block_date BETWEEN @start_date AND @end_date
GROUP BY block_date
),
circ AS (
SELECT
block_date,
MAX_BY(circulating_tokens_supply, computed_at_block_height) AS circulating_supply
FROM `bigquery-public-data.crypto_near_mainnet_us.circulating_supply`
WHERE block_date BETWEEN @start_date AND @end_date
GROUP BY block_date
)
SELECT
block_date AS `date`,
block_height,
total_supply / 1e24 AS total_supply_near,
(burnt_receipts + burnt_conversion) / 1e24 AS burnt_near,
burnt_receipts / 1e24 AS burnt_receipts_near,
burnt_conversion / 1e24 AS burnt_conversion_near,
circulating_supply / 1e24 AS circulating_supply_near
FROM blk
LEFT JOIN eo USING (block_date)
LEFT JOIN tx USING (block_date)
LEFT JOIN circ USING (block_date)
ORDER BY 1
fee_wallet_inflows_daily (sql/fee_wallet_inflows_daily.sql)
-- fee_wallet_inflows_daily (raw balances): end-of-day liquid NEAR balance of the revenue wallets. -- Params: @start_date, @end_date (inclusive), @wallets (ARRAY<STRING>). -- ft_balances_daily has no block_date column; its partition column is epoch_date, so the date -- filter is on epoch_date (documented exception to CLAUDE.md rule 2). liquid is in NEAR units. -- Daily changes are derived in Python (capture.extract.fee_wallets). SELECT epoch_date AS `date`, account_id AS wallet, 'NEAR' AS token, liquid AS balance_end FROM `bigquery-public-data.crypto_near_mainnet_us.ft_balances_daily` WHERE epoch_date BETWEEN @start_date AND @end_date AND account_id IN UNNEST(@wallets) ORDER BY 1, 2
price_daily (HTTP API)
https://api.coingecko.com/api/v3/coins/near/market_chart/range
defillama_intents_daily (HTTP API)
https://api.llama.fi/summary/dexs/near-intents; https://api.llama.fi/summary/fees/near-intents; https://api.llama.fi/summary/fees/near-intents?dataType=dailyRevenue; https://api.llama.fi/summary/fees/near-intents?dataType=dailyHoldersRevenue
- supply_daily.parquet · BigQuery public dataset · 2025-05-10 to 2026-11-01 · pulled 2026-11-02T03:40:33Z · sha256 382b732b
- fee_wallet_inflows_daily.parquet · BigQuery public dataset · 2025-11-07 to 2026-10-31 · pulled 2026-11-02T03:40:35Z · sha256 b32041f1
- price_daily.parquet · CoinGecko API · 2025-11-04 to 2026-11-01 · pulled 2026-11-02T03:43:33Z · sha256 48afd3b4
- defillama_intents_daily.parquet · DefiLlama API · 2024-12-10 to 2026-10-30 · pulled 2026-11-02T03:43:25Z · sha256 ae50ca9a
Assumptions and their sources
- price
- The NEAR price in USD is held constant at its latest value in every run. This isolates volume, take rate and inflation; it is not a forecast and no price level is predicted. The 0.5x and 2x runs are sensitivities to that assumption.
- volume
- Start: the 30-day average daily Intents volume (DefiLlama). Each month multiplies it by exp(growth); growth is bootstrapped from monthly log changes of the monthly average since 2025-06, in blocks of 3 months.
- Take rate
- Buyback take rate (buyback wallet inflow / Intents volume, the basis of CR_float), one value per path drawn uniformly between the lowest and highest observed monthly value.
- inflation
- Two annual rates: 2.5 % constant (observed net supply growth is about 2.5 %, DATA_AUDIT.md Check 6), and the HSP-029 proposal: 2.5 % held for a 90-day grace period, then lowered to 1.6 % over 24 months and held. The proposal steps down every epoch; a linear monthly ramp approximates it. HSP-029 went to a vote in October 2026 and its result is not confirmed in our sources (data/reference/parameters.csv, events.csv).
- supply
- Total supply is held at its latest value, as in V*; real supply grows.
- burn
- Gas burn is held at its 30-day average in NEAR per day.
- Scenarios
- historical: bootstrapped growth as drawn (its drift is the history's)decay: zero-mean draws plus the historical drift, which halves every 12 monthsflat: zero-mean draws: no drift, historical volatility
- Results are conditional on the stated assumptions, not forecasts; no price is predicted.
- The growth sample is short and dominated by the launch phase: see growth.n_months, growth.mean_all and growth.mean_after_launch.
- The historical and decay scenarios inherit a mean growth set by the launch phase; volume_p50_usd_per_day shows the volume each run implies. A probability close to 1 there rests on that volume, not on observed behaviour after the launch.
- The tau range is the lowest to highest of a few complete months and the latest month is its maximum, so the drawn tau is below the current one on average and the flat scenario's median CR starts below the measured CR.
- The buyback take rate has few complete months and was rising; its range is crude.
- Real supply grows with issuance, which lowers CR slightly: the runs are a bit optimistic.
- Buybacks are not burns (CLAUDE.md rule 6): CR is the float view, buyback plus gas burn.
- Month 0 at the latest price differs from the measured CR_float because the buyback is USD converted at that price; at the mean price of the same 30 days the model reproduces it (start.cr_model_month0_at_window_price). CR in every run is therefore price-dependent.