Methodology
How each number is produced, so anyone can check it or re-run it. All code is in nearthesis/; nothing on the dashboard is typed by hand.
Pipeline
- fetch (
nearthesis/sources.py,snapshot.py): calls only public, key-less endpoints and writesdata/snapshot-<UTC date>/<source>.json. Each file is{"meta": {url, provider, fetched_at, note}, "data": ...}.manifest.jsonlists every source and whether it succeeded. A failing source is recorded, not fatal. - analyze (
analyze.py,claims.py,scenario.py,narrative.py): reads only the snapshot, computes metrics, evaluates the pre-registered claims, runs the scenarios and writesout/analysis.jsonandTHESIS.md. - build (
build.py): copies this static site todocs/and embeds the analysis asdata.js, so the dashboard opens from disk with no server and no network (Chart.js is vendored).
Definitions
- Usage: NearBlocks
/v1/chartsdaily rows. "YoY (90d)" = mean of the last 90 days vs the same 90-day window 365 days earlier. "Trend" = OLS slope of ln(value) over the last 365 days, annualised. Charts show weekly means of the daily values. - Protocol parameters:
EXPERIMENTAL_protocol_configon mainnet RPC.max_inflation_rateis the yearly issuance cap;burnt_gas_rewardis the share of burnt gas paid to the called contract (so burned share = 1 − it);protocol_reward_rateis the treasury's cut of issuance. - Parameter history: the archival RPC is sampled at 25 heights from genesis to tip; whenever a parameter differs between two samples, the interval is bisected until it is shorter than one epoch (43,200 blocks). The first block with the new value, its protocol version and timestamp are recorded.
- Burn per day = NearBlocks
gas_fee(yoctoNEAR → NEAR) × burned share in force that day (switched at the change block found above). - Gross issuance over a window = change in total supply + NEAR burned in the window. Annualised by × 365 / days.
- Coverage = (USD value of NEAR burned + USD of Intents-funded buybacks) / USD value of NEAR issued, summed daily with that day's price.
Buybacks are DefiLlama's
dailyHoldersRevenuefornear-intents(NEAR bought back since 2026-02-23). - P/F = CoinGecko market cap / DefiLlama trailing-365-day chain fees. NEAR is also shown with Intents fees (gross) added, and in THESIS.md with only NEAR's captured Intents revenue.
- Lead-lag: weekly totals (Intents volume) or weekly means (price, active accounts, transactions) since Intents volume first exceeded $1M/day; log week-over-week changes; Pearson r between the leader at week t and the target at t+lag for lags 0–8. Noise band = 2/√n.
- Security: current validator set from the
validatorsRPC. Nakamoto coefficient = fewest validators whose stake exceeds 1/3 of the total. Staking-yield upper bound = max inflation × (1 − treasury cut) × total supply / staked supply, before pool fees and uptime. - Developer activity: GitHub
/stats/participation(52 weekly commit counts) for a fixed list of core NEAR and NEAR AI repos, plus org-level counts of public, non-fork, non-archived repos pushed in the last 30/90 days.
Claims and kill criteria
config/claims.json defines each claim as support tests and kill tests on metric keys. A claim is SUPPORTED if every support test holds,
FALSIFIED if any kill test holds (kill wins), MIXED if only some support tests hold, NOT SUPPORTED if none do. Thresholds were set on 2026-11-11;
later snapshots test them out of sample. Changing a threshold should be a visible commit.
Scenario model
Per year: issued = supply × issuance rate; burned = gas fees × burned share ÷ price; bought back = Intents volume × buyback rate ÷ price;
coverage = (burned + bought back) ÷ issued. Gas fees, Intents volume and price compound at their growth rates. Buybacks are treated as removed float
(they are not burned, so total supply only falls by the burn). The same function exists in Python (scenario.py) and JavaScript
(site/model.js); a test checks they agree.
Reproduce
python3 -m nearthesis analyze && python3 -m nearthesis buildrebuilds everything from the committed snapshot (offline).python3 -m nearthesis fetchpulls a fresh snapshot (about 3 minutes, mostly GitHub stats); then analyze + build again.python3 -m nearthesis scenario --set intents_volume_growth=0.6re-runs the model with your assumptions.
Known limitations
- Activity counts cannot separate bots from people. The NEAR BigQuery dataset would allow finer cuts but needs a billed Google Cloud project.
- Intents numbers come from DefiLlama's adapter; the official Intents Explorer API needs a partner JWT.
- Chain "fees" are defined differently per chain on DefiLlama; P/F is a rough lens, not a valuation.
- Correlations use under two years of weekly data and several lags; treat them as weak evidence either way.