CoverageA research report on what NEAR pays back
60s version
NEAR mainnet13 Feb – 12 Nov 2026901 epochs

NEAR gives back 12.0% of what it mints. Break-even is 8.4× away, not 108×.

60sThe short versionOne idea per step, in plain words. Same numbers.Read it

NEAR mints about 2.5% of its supply a year. A fee-burn dashboard sees only the gas burn, 0.92% of issuance, and puts break-even 108 times away. Since April 2026 the NEAR Intents contract has also been sending NEAR to a buyback account, where it is held, not burnt. Count that, and burn plus buybacks offset 12.0% of issuance.1

Verdict for an investor
  • TodayNot yet a supply story. NEAR still mints about 8× what it wins back, and at the median growth rate in the data break-even is in 2110. Don't own NEAR expecting buybacks to offset dilution soon.
  • The betGovernance, not growth. Sending every Intents fee to the buyback (today about 22%) and HSP-029's lower issuance would bring even the base case to about 7 years. Both are votes, not market conditions.
  • Turn more bullish ifHSP-029 is ratified (its veto window runs to 16 Nov 2026, 16:48 UTC) and validators adopt it after the 90-day grace period, or the buyback's share of Intents fees rises toward 50%.
  • Turn bearish ifthe buyback balance keeps falling, payback over 100 epochs drops below 6%, or transfers stop coming from intents.near.

Distance to break-even, on a log scale

burn onlyburn + buybacks
Mainnet, from cacheEpoch ending 2026-11-14 20:58 UTC, reading mainnet
Latest block
224,567,536
Total supply, NEAR
1,311,701,459
Buyback account holds, NEAR
2,287,860
Gained since the forecasts were frozen
+25,141
NEAR in 7 epochsPayback so far 15.2%: inside 2 of 2 committed ranges, scoreboard

Every NEAR minted in the last 29 days, to scale

89,783 NEAR minted a day
9,922NEAR a day gained by the buyback account · 11.05%
829NEAR a day burnt in gas fees · 0.92%
79,032NEAR a day minted and not matched · 88.0%
What a fee-burn dashboard counts
01The claim

Burn and buybacks offset an eighth of issuance. A burn-only view sees a hundredth.

Payback is burn plus the buyback account's gain, divided by NEAR minted to validators. Mint and burn come from total_supply in block headers, exact to the yoctoNEAR; the buyback gain is a balance change between epoch ends.2

Payback, last 29 days
12.0%

of issuance, from burn 0.92% and buybacks 11.05%. 90% resampling range 10.7% to 13.5%.

Break-even
8.4×

Growth in flows needed to equal issuance at constant issuance.

Under HSP-029
5.3×

If maximum issuance falls from 2.5% to 1.6% a year.

Burn alone
108×

What a fee-burn dashboard reports: 0.92% of issuance.

Payback climbed to 16.5% in September and has eased to 12.0%

Intents buybacksGas-fee burn

Share of minted NEAR matched, 100-epoch rolling window. Hover, tap or use the arrow keys for values.

Source: (burn + buyback gain) / mint, from data/epochs.csv and data/buybacks.csv.2 Break-even is 100%, off the top of this frame.
Every series behind the headlineDistance to break-even, buybacks, burn, burn-only coverage, mint and block utilization, each with its method

Flows would have to grow 8.4× at constant issuance; on burn alone 108×.

Distance to break-even. Multiple of today's burn plus buybacks that equals issuance, 100-epoch rolling

Source: mint / (burn + buyback gain)

The account gains 9,922 NEAR a day; its balance fell in 1 of 663 epochs.

Buybacks. NEAR added to the buyback account per day, 100-epoch rolling

Source: view_account balance of buybacks.multisignature.near at each epoch's last block, differenced

Gas fees burn 829 NEAR a day against 89,783 minted.

Burn. NEAR burnt in gas fees per day (exact), 100-epoch rolling

Source: block header total_supply: supply(first block) - supply(last block) + burnt(first block), per epoch

Burn alone equals 0.92% of issuance, which is what a fee-burn dashboard reports.

Burn-only coverage. Fee burn as % of issuance (exact), 100-epoch rolling

Source: burn / mint, both from block header total_supply

Validators are minted 89,783 NEAR a day, 2.47% of supply a year.

Mint. NEAR minted to validators per day (exact), 100-epoch rolling

Source: block header total_supply: supply(first block) - supply(last block of previous epoch) + burnt(first block)

Blocks are 0.78% full, so burn is limited by demand for block space, not by capacity.

Block utilization. Gas used as % of gas limit, sampled, 100-epoch rolling

Source: chunk gas_used / gas_limit over 3 seeded random heights per epoch

02The flow

Almost all of it arrives from one contract, every epoch, and stays put.

The buyback account, buybacks.multisignature.near, gains about 9,922 NEAR a day against 829 NEAR burnt in gas. It is held, not burnt.3

Every epoch since 13 Feb, one column each

Buyback gainBurn100-epoch paybackCommitted band

Share of each epoch's minted NEAR matched by gas burn and buyback gain. Hover or use the arrow keys; click to hold an epoch.

Columns above the top are clipped and capped in ink; a grey column is a transfer from another wallet, excluded. Right of the divider: epochs that closed after the forecast rounds were frozen at height 224,265,136, against the committed payback band. The check buttons refetch three block headers from mainnet in your browser and compare them with the cache to the yoctoNEAR.
Who pays in · share of NEAR received
intents.near · 3,327 transfers77.2%
1csfundsadmin.sputnik-dao.near · 3 transfers22.4%
clingy.near · 1 transfer0.2%
52435fe912…362c8d · 3 transfers0.1%

2,979 of the 2,996 transfers since height 201,009,796 came from intents.near. 1csfundsadmin.sputnik-dao.near sent 22.4% in 3 transfers, including the one the headline excludes.3

The flow did not fall when swaps went private
PeriodNEAR a dayPaybackInflow epochs
30 days before27 Oct, private settlement9,29811.7%101 of 101
17 days since10,45212.5%58 of 58

Since 2026-10-27 a growing share of Intents swaps settles on a private chain (reported by the Tideline entry; our own check of mainnet logs is in the cross-checks below), which hides their fees from public swap data. The buyback balance is on mainnet and still records what arrives.

The buyback account, audited like a short seller would
658 / 658

Epochs that reconcile to the yoctoNEAR, from 3,374 receipts. 5 epochs with multisig calls differ by 0.34 NEAR of gas.

77.2%

Sent by intents.near; 22.4% by 1csfundsadmin.sputnik-da in 3 transfers.

12,025

NEAR that has left: 0.53% of inflow, the largest to a bridge account on 2026-07-10. None burnt.

2 of 4

Keys needed to move it. 0 full-access keys, 4 requests ever, 0 pending. The chain does not say who holds the keys.

The application behind the flow: NEAR Intents, by week

DefiLlama · context only, feeds no headline figure4

Volume is $130M a day, 1.03× a year ago

USD millions a day, weekly average

Source: DefiLlama summary/dexs/near-intents, in data/llama.csv

Captured revenue tracks volume (r = 0.92 over 36 weeks)

USD thousands a day, all revenue wallets

Source: DefiLlama summary/fees/near-intents dailyHoldersRevenue, in data/llama.csv

Take rate: median 2.5 bps, ranging 1.1 to 5.7

Captured revenue per unit of volume, bps · dashed = median

Source: captured revenue / volume, weekly, in data/llama.csv

Cross-checks and data tablesPrivate settlement from raw blocks, chain versus the indexer, and the sender check

Private settlement, checked from raw mainnet blocks

The share of intents.near event logs that name the Confidential Intents treasury, in seeded random blocks (data/private_sample.csv, python3 fetch.py private).

PeriodBlocksEvent logsNaming the treasury90% interval
30 days before 2026-10-2725043813%8% to 18%
Since25063143%36% to 49%

Chain versus the indexer

The same flows over the same days, in NEAR a day. DefiLlama reports USD; each day is converted at that day's price.

Flow, NEAR a dayThis repo, from chainDefiLlama
Gas fees burnt829685its revenue series; its fees series is 979
Buyback account gain9,92213,594captured revenue, all wallets
All three revenue wallets, gain13,984

Who sent it, transfer by transfer

2979 of the 2996 transfers since height 201009796 into the buyback account came from intents.near, carrying 74.0% of the NEAR (NearBlocks, with transaction hashes in data/inflows.csv). The account audit rebuilds with python3 fetch.py history and python3 fetch.py multisig; test_run.py fails if an epoch is unexplained.

03The models

Three levers move payback. Two of them are governance votes.

Payback scales with Intents volume and with the share of gross Intents fees reaching the buyback account, and inversely with the issuance rate. HSP-029, passed by NEAR's House of Stake on 2 November 2026 and awaiting ratification, would lower maximum issuance to 1.6% a year.5

$130M a day today
About 22% today
HSP-029 proposes 1.6%
Payback
12.0%

burn + buybacks, as a share of issuance

Distance to break-even
8.4×

flows must grow this much

Burn0.92%
Buybacks11.05%
NEAR a day10,750
BurnBuybacksUnmatched issuance
Years to break-even, by growth in burn plus buybacks
Growth a yearIssuance 2.5%Ramp to 1.6%
10% a year30.2 yrs21.3 yrs
25% a year10.8 yrs8.2 yrs
50% a year5.6 yrs4.4 yrs
100% a year3.2 yrs2.5 yrs

Function: run.py: main (breakeven_years, growth_needed_*).

Burn forecasters · walk-forward backtest, 510 forecasts
ModelPinballBand held
Persistencerecent level only0.086567%
Clocklevel plus a time-of-week profile0.078565%
Pricelevel plus NEAR's price0.093873%

Lower pinball loss is better. The 10–90% bands are too narrow: they hold about two-thirds of outcomes against a nominal 80%. Functions: run.py: f_persistence, f_clock, f_price, backtest.

Flow identity

Mint and burn per epoch from block-header supply; the buyback gain is a balance change. No parameters.

fetch.py: fetch_epoch · run.py: load

Burn forecasters

Three models give 10/50/90% quantiles of NEAR burnt per epoch, backtested walk-forward.

run.py: f_persistence, f_clock, f_price, backtest

Window bands

Intervals for the next N epochs, from how much consecutive windows have differed. These are the frozen rounds.

run.py: window_claims, predict

Break-even levers

Volume, capture share and issuance, and the years to break-even at a steady growth rate.

run.py: main (breakeven_years)
Model detailFour models, each a few functions in run.py, rebuilt by python3 run.py with no network; outputs in out/results.json

Burn forecasters

Each forecast uses only data before its date, up to 30 epochs ahead. Lower pinball loss is better.

ModelPinball lossAgainst persistence10–90% band held
persistencerecent level only0.0865+0.0%67%
clocklevel plus a time-of-week profile0.0785+9.2%65%
pricelevel plus NEAR's price0.0938-8.5%73%

Window bands

For a window of the next N epochs: the last N-epoch value, scaled by the 5% to 95% range of how much consecutive windows have differed. The table is how often that procedure, run at earlier dates on data available then, contained the outcome. Nominal coverage is 90%.

WindowPaybackNEAR burntBuyback gain
5 epochs134 of 168 80%138 of 169 82%108 of 123 88%
10 epochs71 of 83 86%67 of 83 81%56 of 62 90%
20 epochs35 of 40 88%30 of 40 75%28 of 30 93%

Flow identity

QuantityDefinition
mintsupply(first) - supply(prev last) + burnt(first)
burnburnt(first) + supply(first) - supply(last)
payback(burn + buyback gain) / mint
multiplemint / (burn + buyback gain)

Checked by run.py: load (continuity of heights and supply) and against mainnet by verify.py.

04The path to break-even

Break-even turns on growth and capture. At Intents' volume trend it comes in about 6 years; at slow growth, capturing every Intents fee with HSP-029 brings it to 7.

Not a forecast: three growth rates taken from the data by one rule, and where each takes payback from today's 12.0%. HSP-029, passed on 2 November 2026 and awaiting ratification, moves every date earlier; it does not change which paths arrive.8

Payback over the next ten years, bear to bull

BullBaseBearWith HSP-029

Burn plus buybacks as a share of issuance, log scale. Above the line, NEAR's flows pay back more than it mints.

1%3%10%30%100%Today20282030203220342036Break-even: burn + buybacks = issuance2032Bull+49.9% a yearBase+5.2% a yearBear−23.2% a year
1%3%10%30%100%Today20302035Break-even2032
Source: out/results.json → scenarios.path. Quarterly steps; the chart stops at 200%.
Bear · −23.2% a year
Never

never with HSP-029 either

If gross Intents fees keep shrinking as they did over the past year, the flow shrinks with them and never reaches issuance.

Base · +5.2% a year
2110in 84 years

2075 with HSP-029 (49 years)

At the median year-long rate, payback is 15% of issuance in ten years. At this pace, growth alone is too slow; capture is the lever.

Bull · +49.9% a year
2032in 6 years

2031 with HSP-029 (4 years)

If Intents volume keeps the trend it set over the past year, break-even comes in about 6 years. Five-year break-even needs 57% a year.

Levers on the base case · at today's volume
Share of gross Intents fees capturedPayback todayBreak-even, 2.5%With HSP-029
22% today12%84 yrs49 yrs
50%26%53 yrs27 yrs
100%50%27 yrs7 yrs
Issuance

Today's flow would equal issuance if issuance were 0.30% a year. HSP-029's 1.6% takes the distance from 8.4× to 5.3×. Capture is the larger lever: all of it, with HSP-029, brings the base case to 7 years.

How the three rates are set: one rule, not a choice. The captured flow is nine months old and was ramping up, so its own growth is not used; what drives it is (buybacks are 92% of payback and follow NEAR Intents volume, r = 0.92 by week). Four year-long rates from the DefiLlama year: Intents volume, last 30 days against the first 30 (+2.6%) and log-linear trend (+49.9%); gross Intents fees, the same two ways (−23.2%, +7.7%). Bear is the lowest, base the median, bull the highest. Shorter windows are left out: they annualise August's jump into several hundred percent a year. Paths start at today's 12.0% and hold capture share and NEAR price constant; issuance is a rate on a supply that keeps growing, so the NEAR minted each year rises with it; HSP-029 is a linear ramp from 2.5% to 1.6% over 24 months, starting at its earliest possible date, 2027-02-14 (after the veto window, which runs to 16 Nov 2026, and a 90-day grace period; validators must also adopt the upgrade). Dashed lines: with HSP-029. Shaded: between bear and bull. run.py: scenarios, scenarios in out/results.json.

05The case, both ways

The bear case gets the same page as the bull case.

Six points each side, at equal weight. The full argument, with what would change our mind, is in THESIS.md.

For

The flow is on chain, exact, and has levers.
i

The flow is on chain and exact.

9,922 NEAR a day reach the buyback account, against 829 burnt.

ii

It comes from one contract.

2,979 of 2,996 recent transfers were sent by intents.near.

iii

A separate pipeline agrees.

DefiLlama gives 13,594 NEAR a day for all revenue wallets; balances read from chain give 13,984.

iv

Capture is a lever.

The account receives about 22% of gross Intents fees. All of it, at today's volume, would be 50% of issuance.

v

Issuance is a lever in motion.

At 1.6% a year the multiple is 5.3× at today's flows.

vi

Intents grows as the chain shrinks.

intents.near's daily receipts grew 2.8× since February; its share of all receipts rose from 0.7% to 7.8% (BigQuery).

Against

Held is not burnt, and the trend matters.
i

Buybacks are not burns.

The NEAR sits in a multisig account. Supply does not fall and the holders can spend it.

ii

Payback has been falling.

From a peak of 16.5% on 19 September 2026 to 12.0%.

iii

NEAR Intents is not growing.

Over a year, daily volume is 1.03× and gross fees 0.77× (DefiLlama).

iv

The flow is concentrated.

One application supplies 92% of the payback.

v

The balance has fallen before.

10,283 NEAR left the account in 1 of 663 epochs.

vi

The chain got quieter.

Daily active accounts are down 70% and transactions down 80% since February. Most of the drop in app activity is one app, KaiChing, leaving (BigQuery).

“If the buybacks were burnt, net inflation would be 2.20% instead of 2.48%. They are not, yet.”Inflation if buybacks were burnt · out/results.json
06Network activity (BigQuery)

The chain got quieter; Intents did not. intents.near's daily receipts grew 2.8× while the chain's fell by 76%.

Daily active accounts, transactions and contract usage, from Google's public NEAR dataset bigquery-public-data.crypto_near_mainnet_us. Most of the fall in calls is one app leaving: over the first 30 days earn.kaiching and wallet.kaiching made 79% of all function calls, and neither is in the top 25 now. Daily active accounts fell in one step on 19 Feb 2026, from 504,588 to 146,971, which looks like a single exit rather than a slow drift. Over the same window intents.near's own activity grew in absolute terms, so its share rose from 0.7% to 7.8%: NEAR's activity is moving to the application that pays the buybacks. It does not by itself raise payback: the buyback account is paid from Intents fees, not from receipts.

Daily active accounts: distinct transaction signers per UTC day

Daily active accounts down 70% across the window

Accounts signing at least one transaction averaged 212,037 a day over the first 30 days and 63,923 over the last 30, down 70%.

data/bq/daily_active_accounts.csv · 273 rows · 2026-02-13 to 2026-11-12 · sha256 6500fe36b716

The query behind it · queries/daily_active_accounts.sql
-- daily_active_accounts: accounts that signed at least one transaction, per UTC day.
--
-- Table   bigquery-public-data.crypto_near_mainnet_us.transactions (partitioned on block_date)
-- Columns read: block_date (DATE), signer_account_id (STRING). Nothing else is scanned.
-- Window  2026-02-13 to 2026-11-12, the same days as the repo's chain window; the WHERE clause
--         on block_date prunes partitions, so only these 273 days are read.
-- Cost    BigQuery bills the bytes of the columns read. Measured on 2026-11-13 (dry run): 9.6 GB.
--         The console shows the exact figure ("This query will process ...") before you run it.
--         All four queries together scanned 122 GB; the free sandbox allows 1 TB a month.
-- Run     BigQuery console (sandbox: free, no card): paste, Run, then
--         "Save results" -> "CSV (local file)", saved as data/bq/daily_active_accounts.csv
--     or  mkdir -p data/bq && bq query --use_legacy_sql=false --format=csv --max_rows=1000 \
--           < queries/daily_active_accounts.sql > data/bq/daily_active_accounts.csv
-- Output  block_date, active_accounts (one row per day). Read by bq.py; nothing else edits it.
-- Schema  column names from the dataset's published schema; if the console reports an unknown
--         column, check the table's Schema tab (signer_account_id is the transaction signer).
SELECT
  block_date,
  COUNT(DISTINCT signer_account_id) AS active_accounts
FROM `bigquery-public-data.crypto_near_mainnet_us.transactions`
WHERE block_date BETWEEN DATE '2026-02-13' AND DATE '2026-11-12'
GROUP BY block_date
ORDER BY block_date
Transactions included on chain per UTC day

Daily transactions down 80% across the window

NEAR carried 3,411,071 transactions a day over the first 30 days and 669,188 over the last 30, down 80%.

data/bq/daily_transactions.csv · 273 rows · 2026-02-13 to 2026-11-12 · sha256 041770c13100

The query behind it · queries/daily_transactions.sql
-- daily_transactions: signed transactions included on chain, per UTC day.
--
-- Table   bigquery-public-data.crypto_near_mainnet_us.transactions (partitioned on block_date)
-- Columns read: block_date (DATE) only, so this is the cheapest of the four queries.
-- Window  2026-02-13 to 2026-11-12, filtered on block_date so only these 273 days are read.
-- Cost    measured on 2026-11-13 (dry run): 2.7 GB. The console shows the exact figure before
--         you run it. Free sandbox: 1 TB a month.
-- Run     BigQuery console (sandbox: free, no card): paste, Run, then
--         "Save results" -> "CSV (local file)", saved as data/bq/daily_transactions.csv
--     or  mkdir -p data/bq && bq query --use_legacy_sql=false --format=csv --max_rows=1000 \
--           < queries/daily_transactions.sql > data/bq/daily_transactions.csv
-- Output  block_date, transactions (one row per day).
-- Note    counts every included transaction, successful or not (the status column is not read).
SELECT
  block_date,
  COUNT(*) AS transactions
FROM `bigquery-public-data.crypto_near_mainnet_us.transactions`
WHERE block_date BETWEEN DATE '2026-02-13' AND DATE '2026-11-12'
GROUP BY block_date
ORDER BY block_date
Contract usage: receipts and function calls per day, and how many went to intents.near

intents.near's share of NEAR receipts rose: 0.7% to 7.8%

intents.near received 7.8% of all receipts over the last 30 days, against 0.7% over the first 30: its share of network activity rose.

data/bq/intents_share.csv · 273 rows · 2026-02-13 to 2026-11-12 · sha256 9bc771ecfab2

The query behind it · queries/intents_share.sql
-- intents_share: how much of NEAR's daily contract activity goes to intents.near.
--
-- Table   bigquery-public-data.crypto_near_mainnet_us.receipt_actions (partitioned on block_date)
--         One row per action inside an action receipt. index_in_action_receipt = 0 marks the first
--         action of each receipt, so counting those rows counts receipts without reading the long
--         receipt_id strings.
-- Columns read: block_date, index_in_action_receipt, action_kind, receipt_receiver_account_id.
-- Window  2026-02-13 to 2026-11-12, filtered on block_date so only these 273 days are read.
-- Cost    measured on 2026-11-13 (dry run): 83 GB, the largest of the four. The console shows
--         the exact figure before you run it. Free sandbox: 1 TB a month.
-- Run     BigQuery console (sandbox: free, no card): paste, Run, then
--         "Save results" -> "CSV (local file)", saved as data/bq/intents_share.csv
--     or  mkdir -p data/bq && bq query --use_legacy_sql=false --format=csv --max_rows=1000 \
--           < queries/intents_share.sql > data/bq/intents_share.csv
-- Output  block_date, receipts, intents_receipts, function_calls, intents_function_calls,
--         intents_receipt_share (one row per day).
-- Check   action_kind values follow the NEAR indexer enum ('FUNCTION_CALL', 'TRANSFER', ...). If
--         function_calls comes back 0, run SELECT DISTINCT action_kind for one day and adjust.
SELECT
  block_date,
  COUNTIF(index_in_action_receipt = 0) AS receipts,
  COUNTIF(index_in_action_receipt = 0 AND receipt_receiver_account_id = 'intents.near') AS intents_receipts,
  COUNTIF(action_kind = 'FUNCTION_CALL') AS function_calls,
  COUNTIF(action_kind = 'FUNCTION_CALL' AND receipt_receiver_account_id = 'intents.near') AS intents_function_calls,
  SAFE_DIVIDE(
    COUNTIF(index_in_action_receipt = 0 AND receipt_receiver_account_id = 'intents.near'),
    COUNTIF(index_in_action_receipt = 0)) AS intents_receipt_share
FROM `bigquery-public-data.crypto_near_mainnet_us.receipt_actions`
WHERE block_date BETWEEN DATE '2026-02-13' AND DATE '2026-11-12'
GROUP BY block_date
ORDER BY block_date
Contract usage: the 25 contracts with the most function calls, first and last 30 days of the window

intents.near ranks 3rd by function calls

Share of all function calls, last 30 days, top 10; grey text: rank in the first 30 days

embr.playember_reserve.nearnew in top 2518.6%
token.sweatwas 48.6%
intents.nearwas 118.0%
game.hot.tgwas 37.7%
wrap.nearwas 96.2%
dclv2.ref-labs.nearwas 165.6%
v2.ref-finance.nearwas 54.4%
implicit account 172086…was 174.4%
v2.jars.sweatwas 73.9%
claim.sweatwas 63.3%
Gone from the top 25 since the first 30 days
  • earn.kaiching was 1st with 51.4% of all calls
  • wallet.kaiching was 2nd with 28.0% of all calls

intents.near ranked 3rd by function calls over the last 30 days (8.0% of all calls), against 11th over the first 30.

data/bq/top_contracts.csv · 50 rows · sha256 d8c82da3344a

The query behind it · queries/top_contracts.sql
-- top_contracts: the 25 contracts receiving the most function calls, in the first and the last
-- 30 days of the window, so a change in rank (intents.near's in particular) is visible.
--
-- Table   bigquery-public-data.crypto_near_mainnet_us.receipt_actions (partitioned on block_date)
-- Columns read: block_date, action_kind, receipt_receiver_account_id.
-- Window  two 30-day slices of 2026-02-13 to 2026-11-12: 2026-02-13 to 2026-03-14 and
--         2026-10-14 to 2026-11-12. The WHERE clause on block_date reads only those 60 days.
-- Cost    measured on 2026-11-13 (dry run): 26 GB. The console shows the exact figure before
--         you run it. Free sandbox: 1 TB a month.
-- Run     BigQuery console (sandbox: free, no card): paste, Run, then
--         "Save results" -> "CSV (local file)", saved as data/bq/top_contracts.csv
--     or  mkdir -p data/bq && bq query --use_legacy_sql=false --format=csv --max_rows=1000 \
--           < queries/top_contracts.sql > data/bq/top_contracts.csv
-- Output  period ('first_30d' or 'last_30d'), rank, contract, function_calls, share; up to 26 rows
--         a period (the top 25, plus intents.near if it ranks lower)
--         (share = the contract's function calls / all function calls in that period).
WITH calls AS (
  SELECT
    IF(block_date <= DATE '2026-03-14', 'first_30d', 'last_30d') AS period,
    receipt_receiver_account_id AS contract
  FROM `bigquery-public-data.crypto_near_mainnet_us.receipt_actions`
  WHERE (block_date BETWEEN DATE '2026-02-13' AND DATE '2026-03-14'
         OR block_date BETWEEN DATE '2026-10-14' AND DATE '2026-11-12')
    AND action_kind = 'FUNCTION_CALL'
),
per_contract AS (
  SELECT period, contract, COUNT(*) AS function_calls
  FROM calls
  GROUP BY period, contract
),
ranked AS (
  SELECT
    period,
    ROW_NUMBER() OVER (PARTITION BY period ORDER BY function_calls DESC, contract) AS rank,
    contract,
    function_calls,
    function_calls / SUM(function_calls) OVER (PARTITION BY period) AS share
  FROM per_contract
)
SELECT period, rank, contract, function_calls, share
FROM ranked
WHERE rank <= 25 OR contract = 'intents.near'  -- intents.near is kept even outside the top 25
ORDER BY period, rank

How to run them

Open the BigQuery console (the sandbox is free and needs no card), paste a file from queries/, Run, then Save results → CSV (local file) as data/bq/<name>.csv. Or: bq query --use_legacy_sql=false --format=csv --max_rows=1000 < queries/x.sql > data/bq/x.csv. Then python3 run.py.

Kept apart from the result

run.py never reads these files, so the headline numbers and the result hash do not depend on an account with Google. Each CSV's sha256 is shown under its chart.

No Intents Explorer pull

The 1Click Swap API terms (section 4.1(e)) forbid keeping its data beyond 24 hours, so a committed copy could not be re-checked. Intents volume and fees come from DefiLlama's public series instead.

07Check it yourself

Forecasts frozen in Bitcoin, scored by the chain while you judge.

Each round was frozen before the epochs it describes existed, and its hash is anchored with OpenTimestamps. run.py refuses a round that is not exactly what the code derives from the data up to its height.7

Frozen 12 Nov 2026PASS

Next 5 epochs

After height
224,265,136
Committed payback
6.9% – 27.2%actual 14.9%, HIT
NEAR burnt
1,193 – 1,880actual 1,407, HIT
Buyback gain
7,318 – 35,576actual 17,739, HIT
Closes
closed 14 Nov 07:16UTC
5 of 5 epochs closed5 of 5 inside burn band
NEAR burnt per epoch, committed 10–90% band (clock model)
0238477epoch 1epoch 5
predictions/round-224265136-h05.json
sha256 e4cf5acdca0e2f74153a91c93febba9a185b9c7b0e1c2a0edc97df11db7530ba
Frozen 12 Nov 2026PENDING

Next 10 epochs

Payback so far, 7 of 10 epochs15.2%inside the committed 6.3%–30.8%
After height
224,265,136
Committed payback
6.3% – 30.8%
NEAR burnt
2,174 – 3,554
Buyback gain
14,073 – 86,748
Closes
≈ 15 Nov 19:00UTC
7 of 10 epochs closed6 of 7 inside burn band
NEAR burnt per epoch, committed 10–90% band (clock model)
0239479epoch 1epoch 10
predictions/round-224265136-h10.json
sha256 2c738b805dd13904d226f2511ebb437fb7780f908a96e79c6a3f2cedab39321f
Frozen 12 Nov 2026PENDING

Next 20 epochs

Payback so far, 7 of 20 epochs15.2%inside the committed 6.9%–26.8%
After height
224,265,136
Committed payback
6.9% – 26.8%
NEAR burnt
2,820 – 6,524
Buyback gain
34,148 – 133,348
Closes
≈ 18 Nov 17:00UTC
7 of 20 epochs closed6 of 7 inside burn band
NEAR burnt per epoch, committed 10–90% band (clock model)
0239479epoch 1epoch 20
predictions/round-224265136-h20.json
sha256 926ba45df2401210a5d871b512caddbd92f41fca761cbcebf02d53814c9bddf5
15–18 Nov

Both open rounds close in this window, each scored by mainnet when it does. Historically the payback band has held 82% of the time, so an occasional miss is expected even when the model is right, and a pass near the bounds is weak support.

Scoreboard3 rounds frozen: 1 pass, 2 pending. A scheduled job scores each round as its epochs close; nothing is ever removed. Freezing new rounds is paused during judging.
FrozenWindowCommitted paybackActualEpochs closedVerdict
2026-11-125 epochs6.9% to 27.2%14.9%5 of 5PASS
2026-11-1210 epochs6.3% to 30.8%pending7 of 10PENDING
2026-11-1220 epochs6.9% to 26.8%pending7 of 20PENDING
Reproduce every number · recorded output, so you can check without running anything
1

Get the repository

Python 3.9 or later, no packages, no keys.

$ git clone https://github.com/nice-bills/Coverage
cd Coverage
2

Rebuild offline

Every figure on this page, from the cached chain data, in about two seconds with no network. Below is the output of the build that produced this page, ending with the result hash.

$ python3 run.py
... summary values printed above, as in out/results.json
LEDGER round-224265136-h05.json: 5/5 epochs closed -> PASS
LEDGER   burn_total: 1193.06 to 1879.68, actual 1407.28 -> HIT
LEDGER   buyback_total: 7317.79 to 35576.2, actual 17739.3 -> HIT
LEDGER   payback: 0.0690182 to 0.272094, actual 0.149362 -> HIT
LEDGER round-224265136-h10.json: 7/10 epochs closed -> PENDING
LEDGER   burn_total: 2173.99 to 3553.67, actual None -> PENDING
LEDGER   buyback_total: 14073.0 to 86747.8, actual None -> PENDING
LEDGER   payback: 0.0627287 to 0.307977, actual None -> PENDING
LEDGER round-224265136-h20.json: 7/20 epochs closed -> PENDING
LEDGER   burn_total: 2819.73 to 6523.96, actual None -> PENDING
LEDGER   buyback_total: 34148.4 to 133348.0, actual None -> PENDING
LEDGER   payback: 0.0687373 to 0.267913, actual None -> PENDING
RESULT sha256=a214eaa40dbd90f2e2d453838be6857b27391c1d948e1eb253b2257668d6940d

Recorded by GitHub Actions at 2026-11-14 23:59 UTC: the log of that run. Every run's full log is public.

3

Run the self-test

Scoring maths, data hashes, and refusal of a cache or a forecast round with one value changed.

$ python3 test_run.py
SELFTEST PASS

Recorded by GitHub Actions at 2026-11-14 23:56 UTC: the log of that run. Every run's full log is public.

4

Check against mainnet

Random epochs are refetched from the chain and must match the cache exactly.

$ python3 verify.py 3 20261112
verify.py n=3 at 2026-11-12 21:00:39 UTC, sources https://archival-rpc.mainnet.fastnear.com and https://mainnet.neardata.xyz
epoch 194629925-194673124: MATCH  mint=26891.134 burn=163.969 NEAR
epoch 220247534-220290733: MATCH  mint=26829.968 burn=239.643 NEAR
epoch 207676334-207719533: MATCH  mint=26461.174 burn=155.027 NEAR
VERIFY seed=20261112 PASS (3/3 epochs match the chain, 6 blocks checked against their parents)

Recorded 2026-11-12 21:00:39 UTC with seed 20261112, in VERIFY.txt. Pick your own seed: the free endpoints rate-limit, so the scheduled job does not run it. The “Check a random epoch” button in chapter 02 does the same check in your browser.

5

Score the rounds

Fetch the epochs that closed since; run.py prints PASS or FALSIFIED per round (the LEDGER lines above).

$ python3 fetch.py --epochs 45 && python3 run.py
Result hash

If your run prints a different hash, the page and the data disagree.

Expected: sha256 of out/results.json, as README.md statesa214eaa40dbd90f2e2d453838be6857b27391c1d948e1eb253b2257668d6940d
This build: the RESULT line python3 run.py printeda214eaa40dbd90f2e2d453838be6857b27391c1d948e1eb253b2257668d6940d
Match: this build printed the expected hash
Coverage · MIT licence · github.com/nice-bills/Coverage · result a214eaa40dbdSet in Instrument Serif & Inter. Teal comes back to the token; terracotta is burnt.