Method
How verdicts work
PRIX tests six claims about NEAR. Each claim has one metric and two thresholds, written in a public file before the data was read: one for Supported, one for Not supported. Anything between them is Mixed.
Once a day, a job reads public sources (RHEA, NEAR RPC, NearBlocks, FastNEAR, NEAR Intents), writes everything it read into one snapshot file and hashes it with sha256. The verdicts are computed from that file alone, by plain code with no language model involved, so anyone with the file gets the same answer.
If a claim does not have enough data, PRIX says “Not enough data yet” and shows how much is missing. Missing values read “Not reported” and are never estimated.
Thresholds
Version 1, DRAFT, not locked. Lock commit: not set yet. Once locked, any change becomes a new version and old and new verdicts are shown side by side.
thresholds/v1.yaml · sha256 e1d514b39deeafbf… · what changed from earlier rules
| Claim | Metric | Supported | Not supported |
|---|---|---|---|
| H1 | Spearman rho of 7d-MA daily active accounts vs 7d-MA NEAR price, 180d | abs(rho) < 0.30 AND 30d avg active accounts growth >= 0% | rho >= 0.60 |
| H2 | intents_custody_usd / rhea_clean_tvl_usd, daily, last 30d | ratio >= 2.0 on >= 80% of days | ratio < 1.0 on > 50% of days |
| H3 | count of non-NEAR, non-wNEAR tokens with $100k price impact <= 1.0% (RHEA router + Intents dry-run quotes, best of both) | >= 5 tokens | <= 1 token |
| H4 | volume from non-rejected, non-flagged pools / total reported volume, 30d | >= 80% | < 60% |
| H5 | net Intents flow (deposits - withdrawals), 7d and 30d, plus 30d TVL change | 30d net > 0 AND 7d net > 0 AND 30d clean TVL change > 0 | 30d net < 0 AND 7d net < 0 |
| H6 | Intents custody and daily intents.near txns vs pre-incident 7d median | both >= 90% of baseline within 30d of incident_date | either < 70% of baseline at day 30 |
Evidence grades
- Grade Aread directly from the chain (RPC or contract view).
- Grade Bread from an indexer or public API (RHEA indexer, NearBlocks, FastNEAR) and recomputed by PRIX.
- Grade Cderived or modelled from grade A or B data.
H3 drops to grade C when a passing token’s depth comes only from pool reserve math rather than a router quote.
Data sources
| Source | Used for | Last fetched |
|---|---|---|
| RHEA indexer | AMM pools & reserves (list-top-pools), token prices & metadata, 24h volume per DCL pool, pool detail, recent swaps & liquidity events, protocol totals | 2026-11-14 07:37 UTC |
| RHEA data service | Daily protocol TVL (AMM + lending), daily per-pool TVL & volume, 24h volume variation | 2026-11-14 07:37 UTC |
| RHEA Smart Router | Read-only route quotes used to measure price impact. Nothing is executed. | 2026-11-14 07:37 UTC |
| NEAR RPC (FastNEAR free) | dclv2.ref-labs.near list_pools (DCL reserves), ft_total_supply per token | live (cached 10 min) |
| FastNEAR API | Top 100 holders per token; token balances of intents.near | live (cached 10 min) |
| NearBlocks API v3 | Daily txns/active accounts/price; receipt → transaction → signer; account creation; NEAR Intents MINT/BURN events | 2026-11-14 07:37 UTC |
| NEAR Intents 1Click | Independent price for cross-checking RHEA prices; sizing of the BTC/ETH/SOL quote legs | 2026-11-14 07:37 UTC |
| NEAR Intents 1Click quotes | POST /v0/quote with dry:true for the depth matrix. Dry quotes carry no deposit address; nothing is ever sent. | 2026-11-14 07:37 UTC |
| NEAR archival RPC (FastNEAR) | ft_balance_of(intents.near) at the first block of each UTC day since 2026-09-19 (H6 custody quantity index) | 2026-11-14 07:37 UTC |
| NearBlocks intents.near stats | Daily intents.near transactions (H6) | 2026-11-14 07:37 UTC |
| Incident reporting | The 2026-10-01 NEAR Intents exploit date (also CoinDesk, 2026-10-01) | cited, not fetched |
Fetch times are from snapshot 2026-11-14; live pages (Tokens, Capital) refetch every 10 minutes.
Re-run it yourself
Three commands. The last one refetches every source, rebuilds the snapshot in memory and compares it with the published one.
git clone https://github.com/emmatechyy/prix && cd prixpnpm install --frozen-lockfilepnpm verifyAdd --claim H4 to print one claim’s figures, or --offline to check only the hash and the verdicts.
API
Public, read-only, CORS open. Every snapshot-backed response carries source_hash, the sha256 of the snapshot it came from. Full description: /api/v1/openapi.json.
curl -s https://prix-orcin.vercel.app/api/v1/thesis/api/v1/thesisverdicts H1–H6/api/v1/history?claim=H4one claim across all snapshots/api/v1/depthdepth matrix rows/api/v1/integrityTVL with and without the pools we didn’t count/api/v1/snapshots/<date>a published snapshot file/api/v1/index,/flows,/whales,/launcheslive views
Limits and neutrality
RHEA is both a data source and a subject of the thesis. PRIX therefore never takes RHEA’s headline numbers on trust: it recomputes TVL pool by pool, leaves out pools it cannot price, and checks RHEA prices against NEAR Intents. PRIX has no commercial relationship with RHEA or NEAR Intents.
The 2026-10-01 NEAR Intents incident date comes from the team’s own statement and press reports (NEAR Intents (@near_intents) on X, Alex Shevchenko (NEAR Intents GM), postmortem on X, CoinDesk, The Block); where they disagree on timing or amount, PRIX shows the range.
- H2 needs 30 daily snapshots; there is no honest backfill, so it reads “Not enough data yet” until the window fills.
- H5 flows are read page by page from NearBlocks; only hours actually read count as coverage, and nothing is scaled up.
- 1Click quotes without a partner key carry a flat 0.2% app fee, reported on its own; slippage is measured net of it.
- Holdings outside RHEA (other exchanges) are not covered. FastNEAR returns the top 100 holders only.
Changelog
- 2026-11-14 Frontend: four destinations (Verdicts, Tokens, Capital, Method), threshold rails, evidence panels, light and dark themes. Old addresses redirect permanently.
- 2026-11-14 Methodology 2.1: H4 measures volume share from verified pools out of all live pools, with wash flags; H5 needs 80% coverage of both windows before any verdict; 1Click slippage is net of the flat app fee; every depth row names its router and version; snapshots move to the data branch.
- 2026-11-13 Thresholds v1 written down as a DRAFT (not locked). First self-contained daily snapshot with sha256, verdict engine for H1–H6, depth matrix, public API with source_hash.
Definitions behind the index
The rules behind Tokens and Capital: what PRIX refuses to count, how the score is built, and the curated labels.
Integrity rules — what PRIX refuses to count
PRIX recomputes every pool's value as Σ reserve × RHEA price from on-chain reserves (AMM reserves from the RHEA indexer, DCL reserves read directly from dclv2.ref-labs.near). A pool is excluded from every metric if any rule trips:
- One side of the pool has no price — one token has no RHEA price.
- The two sides differ in value by more than 3× — a constant-product (50/50) pool whose two sides differ by more than 3×. Equal value is an invariant of these pools, so a gap means one price is wrong.
- Priced against a token with no reliable price — neither side is a base asset (NEAR, stablecoins, liquid-staked NEAR, curated bridged majors). Two thinly traded tokens can price each other at any level.
- Claims more than half of RHEA’s whole TVL — a single pool claims more than 50% of RHEA's whole reported TVL.
- Under $1,000 of liquidity — pools under $1,000 are ignored (not rejected).
Prices are cross-checked against NEAR Intents 1Click; gaps above 5% are flagged. Protocol TVL history drops days above 3× the 90-day median. Intents custody drops any asset worth more than 10× the next one.
PRIX Index score
Universe: non-stablecoin tokens with ≥ $50,000 of verified liquidity, top 24 by liquidity. Score = weighted mean of available pillars (0–100):
- Depth (30%) — impact
i= 1 − USDC out ÷ $10,000 for a $10,000 sell quoted by the RHEA Smart Router (fees included).score = 100 × clamp((log10 0.10 − log10 i) ÷ (log10 0.10 − log10 0.003)): ≤0.3% → 100, ≥10% → 0. If the router has no route, PRIX uses exact constant-product math on the deepest verified AMM pool:i = 1 − (1 − fee) × X ÷ (X + 10,000)with X the token-side reserve in USD. DCL-only tokens without a route: not reported. - Activity (25%) — 24h USD volume across the token's verified pools.
score = 100 × clamp((log10 vol − 3) ÷ 5): $1k → 0, $100M → 100. Capped at 50 if turnover (volume ÷ paired TVL) exceeds 5×/day or if round trips exceed 30% of sampled volume. - Distribution (20%) — share of float (supply minus custody contracts) held by the 10 largest non-custody accounts among the top 100 (FastNEAR), with supply from
ft_total_supply.score = 100 × clamp((0.9 − s) ÷ 0.7): ≤20% → 100, ≥90% → 0. - Flow (25%) —
50 + 25·p + 15·clamp(ΔTVL7d ÷ 25%) + 10·clamp(vol7d ÷ vol30d − 1), wherep= (bought − sold) ÷ (bought + sold) in the last 50 swaps of the token's deepest verified pool.
Confidence = sum of weights with data. Tokens below 50% are listed but not ranked.
Signals and heuristics
- Round trip — a buy and a sell of the same token within 10 minutes whose USD sizes are within 2% (each ≥ $50). It is a pattern, not proof of wash trading.
- Volume spike — 7-day average daily volume more than 2× the prior 30-day average.
- Whale — any swap or liquidity move ≥ $10,000, sampled from the latest 50 swaps in the 16 busiest verified pools and the latest liquidity events in the 14 deepest. Swap size uses the smaller leg. The 18 largest swaps and 20 newest LP moves are traced receipt → transaction → signer.
- Intents flows — intents.near token events from NearBlocks, paged newest-first with a stored cursor: each run pages back from now to the newest instant already read, and unread stretches are kept as gaps that later runs resume. MINT = deposit, BURN = withdrawal, valued at the price recorded on each event. Coverage = hours of the window actually read ÷ hours in the window; H5 needs ≥ 80% of both the 7d and 30d windows before it gives any verdict. Nothing is scaled up to cover what was not read.
- H4 volume from verified pools — numerator: 30-day volume of pools that are not rejected and not wash-flagged; denominator: 30-day volume of every live pool (≥ $1k TVL), rejected and flagged included. Wash flags: mean daily volume above 2× the pool's TVL, or ≥ 10% of all volume while more than 5× its share of TVL (verified pools). These are signals, not proof: concentrated-liquidity pools turn over their TVL faster by design.
Launch radar score
Candidates: the non-base token of the 80 highest-id AMM pools and the 120 most recently listed DCL pools with ≥ $1k verified liquidity; the deepest 16 are scored.
- Liquidity (35%):
100 × clamp((log10 TVL − 3) ÷ 3)— $1k → 0, $1M → 100. - Distribution (25%): as in the index.
- Activity (20%):
100 × clamp((log10 vol24h − 2) ÷ 4). - Maturity (20%): token account age ÷ 30 days, capped at 100.
Curated labels
Custody accounts (excluded from holder concentration): intents.near, v2.ref-finance.near, dclv2.ref-labs.near, contract.main.burrow.near, omni.bridge.near, aurora, factory.bridge.near, e-11.bridge.near, token.sweat, meta-pool.near, linear-protocol.near, lst.rhealab.near, staking.rhealab.near, xtoken.rhealab.near, xtoken.ref-finance.near, boostfarm.ref-labs.near, v2.ref-farming.near, orderly-network.near, asset-manager.orderly-network.near, veax.near, app.nearcrowd.near, dex-aggregator.intear.near, v2-pool-creator.justhoot.near, plus account names matching pool/vault/launchpad/bridge/lockup/farm/staking.
Sectors: curated for well-known contracts; otherwise by suffix — .omft.near → Omni-bridged; launchpad factories (meme-launchpad, justhoot, nearlytrade, tkn.near, meme-cooking, batgirlfun) → Launchpad / meme; .factory.bridge.near → Bridged; anything else → Unclassified.