OCB — Methodology
The measurement standard.
Cite as
OnChain Benchmark. "Methodology v1.0." OnChain Benchmark, 2026. https://onchainbenchmark.com/methodology. Permanent anchor: #methodology-v1.0.
This document is the authority behind every Trust Rating, dimension score, and Index level published on OnChain Benchmark. Each procedure resolves to a specific data path, scoring band, and source — making any number independently reproducible. This document is not investment advice and does not rate issuer creditworthiness; it measures the transparency of onchain disclosure.
How each product score is computed.
Three scoring frameworks share a four-dimension architecture (Disclosure Quality, Redemption Liquidity, Structural Trust, Holder Concentration), each scored 0–25 for a composite of 0–100. Per-product details differ: asset-class weights, sub-signal definitions, and band thresholds vary. §1.1 is always open. §1.2 and §1.3 are collapsed by default.
RWA Quality Methodology v1.0
locked 2026-06-06
This rating measures whether an RWA instrument's published value or yield claim is independently verifiable, whether holders can exit under realistic conditions, and whether the issuer has made structural commitments that support long-term trust. It does not assess creditworthiness, predict price performance, or verify the accuracy of off-chain reserve holdings.
Disclosure Quality
0–25 ptsPrinciple
Disclosure Quality measures whether an issuer's published value or yield claim can be independently verified against an external benchmark, and whether the issuer maintains ongoing disclosure discipline over time.
Sub-signal A — Claim Verifiability (weight varies by asset class)
| Input condition | Score |
|---|---|
| Oracle delta ≤ 10 bps | 25 |
| Oracle delta ≤ 25 bps | 23 |
| Oracle delta ≤ 50 bps | 20 |
| Oracle delta ≤ 100 bps | 16 |
| Oracle delta ≤ 200 bps | 11 |
| Oracle delta ≤ 400 bps | 6 |
| Oracle delta > 400 bps | 2 |
| Peg-NAV: regulated daily filing | 23 |
| Peg-NAV: voluntary daily attestation | 19 |
| Peg-NAV: regulated monthly filing | 19 |
| Peg-NAV: voluntary monthly attestation | 16 |
| Peg-NAV: regulated quarterly filing | 14 |
| Peg-NAV: voluntary quarterly attestation | 11 |
| Peg-NAV: aggregate attestation naming instrument | 9 |
| Peg-NAV: self-published rate, no cadence | 7 |
| No published rate | 3 |
Sub-signal B — Attestation Freshness
| Age of most recent attestation | Score |
|---|---|
| ≤ 7 days | 25 |
| ≤ 30 days | 22 |
| ≤ 45 days | 19 |
| ≤ 90 days | 15 |
| ≤ 180 days | 10 |
| ≤ 365 days | 5 |
| > 365 days or absent | 0 |
Sub-signal C — Disclosure Consistency
| Attestation count (trailing 180 days) | Score |
|---|---|
| ≥ 90 (daily) | 25 |
| ≥ 12 (weekly-ish) | 22 |
| ≥ 6 (monthly) | 18 |
| 4–5 | 14 |
| 2–3 | 10 |
| 1 | 5 |
| 0 | 0 |
Per-class weights (A / B / C)
| Asset class | Verifiability | Freshness | Consistency |
|---|---|---|---|
| Treasury | 40% | 30% | 30% |
| Commodity | 35% | 40% | 25% |
| Private credit | 30% | 30% | 40% |
| Equities | 40% | 30% | 30% |
Cap rules (applied in order)
Aggregate-attestation cap: when sub-signal A is at the aggregate tier (raw score = 9), sub-signals B and C are each capped at 13 before the weighted sum.
Voluntary-attestation cap: when the attestation is voluntary (third-party, not a regulated filing), the composite Disclosure Quality is capped at 19 after the weighted sum.
Data input: norm_disclosure_quality.claim_verifiability_score, .attestation_freshness_age_days, .disclosure_consistency_count_180d
Redemption Liquidity
0–25 ptsPrinciple
Redemption Liquidity measures whether a holder can actually exit the instrument under realistic conditions. Both the direct (issuer redemption) and onchain (DEX swap) paths are real. The dimension rewards genuine depth on either path with a joint-path bonus.
Direct-redemption path (declared per instrument)
| Profile | Score |
|---|---|
| Retail-accessible, low minimum, T+0/T+1 documented | 22 |
| Retail-accessible, moderate minimum, T+1 to T+3 | 19 |
| Institutional-only (high minimum, AP-only documented) | 17 |
| Available but terms opaque / delays | 12 |
| No direct redemption path documented | 0 |
Onchain secondary path (DEX depth as % of supply)
| liquidity_pct | Score |
|---|---|
| ≥ 20% | 24 |
| ≥ 10% | 21 |
| ≥ 5% | 17 |
| ≥ 2% | 13 |
| ≥ 0.5% | 9 |
| > 0% | 4 |
| 0% | 0 |
Joint-path bonus: if both direct AND onchain paths exist, composite = max(direct, onchain) + 3, capped at 25.
Data input: norm_redemption_liquidity.direct_redemption_profile, .liquidity_pct, .joint_path_bonus_applied
Structural Trust
0–25 ptsPrinciple
Structural Trust measures the structural and procedural commitments an issuer has made — regulatory framework, governance controls, and custody verification — independent of any specific data point.
Sub-signal A — Regulatory Standing
| Tier | Score |
|---|---|
| US SEC-registered fund + PCAOB-registered auditor + audit within 12mo | 25 |
| US SEC-registered fund + named non-PCAOB auditor + audit within 12mo | 21 |
| US NYDFS trust company or equivalent + named auditor + audit within 12mo | 21 |
| Major foreign regulator (FCA, MAS, BMA DABA, etc.) + named auditor + audit within 12mo | 18 |
| Claims regulation but weak documentation / audit > 12mo | 12 |
| Claims regulation but no auditor or no audit recency | 8 |
| No regulatory framework documented | 0 |
Sub-signal B — Governance Quality (base + upgrade + timelock bonus, capped 25)
| Component | Score |
|---|---|
| Base: multisig 4-of-7+ (genuinely distributed) | 16 |
| Base: multisig 3-of-5 (standard institutional) | 13 |
| Base: multisig 2-of-3 (minimal) | 9 |
| Base: DAO with active delegation + structured proposals | 13 |
| Base: timelock-only (no multisig) | 7 |
| Base: single EOA / unknown signers / unknown threshold | 0 |
| +8 if contract is immutable | +8 |
| +6 if transparent proxy with timelock-protected upgrade | +6 |
| +3 if UUPS proxy with admin-controlled upgrade | +3 |
| +0 if unrestricted upgrade authority | +0 |
| +2 timelock bonus if admin operations are timelock-gated | +2 |
Sub-signal C — Custody Verification
| Surface | Score |
|---|---|
| Commodity: independent vault auditor reports with serial numbers | 25 |
| Treasury: SEC-filed schedule of investments (N-MFP3, N-PORT, N-CSR) | 25 |
| Private credit: published loan tape with borrower-level detail | 25 |
| Partial signal (auditor named but reports not public; schedule filed but aggregated) | 16 |
| Custody described in marketing only — no independent verification | 8 |
| No custody verification surface documented | 0 |
Per-class weights (A / B / C)
| Asset class | Regulatory | Governance | Custody |
|---|---|---|---|
| Treasury | 40% | 20% | 40% |
| Commodity | 30% | 20% | 50% |
| Private credit | 30% | 20% | 50% |
| Equities | 50% | 30% | 20% |
Data input: norm_structural_trust.regulatory_standing_score, .governance_quality_score, .custody_verification_score
Holder Concentration
0–25 ptsPrinciple
Holder Concentration measures the distribution of token ownership across holders, post-exclusion. Two tracks: retail-facing (Track 1) and institutional-direct (Track 2), because concentrated holdings in an AP-only instrument are the design, not a transparency failure.
Track 1 — Retail-facing (top10_pct post-exclusion)
| ≤ 20% | 25 |
| ≤ 35% | 22 |
| ≤ 50% | 20 |
| ≤ 65% | 14 |
| ≤ 80% | 9 |
| > 80% | 4 |
| null (no data) | 8 |
Track 2 — Institutional-direct (top10_pct post-exclusion)
| ≤ 50% | 25 |
| ≤ 70% | 22 |
| ≤ 85% | 18 |
| ≤ 95% | 13 |
| > 95% | 8 |
| null (no data) | 8 |
Exclusions applied before scoring: protocol contracts, treasury proxies, labeled exchange custody — each verified to ≥90% confidence and individually documented.
Data input: norm_concentration.top10_holder_pct, .concentration_track
Band thresholds — RWA Quality v1.0
| ≥ 85 | Verified | Capital counts toward Verified Capital |
| 65–84 | Rated | Strong disclosure; some gaps |
| 45–64 | Limited | Partial disclosure; material gaps |
| < 45 | Unverifiable | Insufficient evidence to assess |
Note: the Verified Capital threshold (85) and the Verified band threshold (85) are documented as separate parameters that happen to share a value at v1.0. They may evolve independently through change control (Q9 principle).
Click to expand the full Stablecoin Health Methodology v1.0-stablecoin rubric — dimensions, sub-signals, weights, and thresholds.
Click to expand the full Equities Transparency Methodology v1.0-equities rubric — dimensions, sub-signals, weights, and thresholds.
How per-instrument scores aggregate to market-level indexes.
Supply-weighted index
raw_index = Σ(score_total × supply_usd) / Σ(supply_usd)
Verified Capital (RWA threshold = 85)
verified_capital_usd = Σ(supply_usd) WHERE score_total ≥ 85
Healthy Capital (Stablecoin threshold = 80)
healthy_capital_usd = Σ(supply_usd) WHERE score_total ≥ 80
The index does not publish if any constituent has data older than 36 hours. Better to skip a day than to publish a silently-narrowed composite.
During the calibration period, scores are tagged is_calibration = true and are not used as the chart starting point. The inception snapshot is set when calibration ends and the index is declared authoritative.
The Verified Capital threshold (85) and the Verified band threshold (85) are documented as separate parameters coincidentally sharing a value at v1.0. They may evolve independently through change control.
Where the scoring framework's inputs come from.
Pipeline credibility is upstream of methodology credibility. If inputs are unreliable, the rubric produces unreliable scores. This section documents every data source, normalization rule, and failure mode that affects a published score.
§2.1 — Chain coverage
| Chain | Family | RPC provider | What we collect | Freshness SLA |
|---|---|---|---|---|
| Ethereum | EVM | Alchemy (primary), QuickNode (backup) | Supply, holders, pool depth, oracle reads | 36h |
| Polygon | EVM | Alchemy | Supply, holders, pool depth | 36h |
| Base | EVM | Alchemy | Supply (BENJI) | 36h |
| Arbitrum | EVM | Alchemy | Supply (Dinari dShares, 36 instruments) | 36h |
| Avalanche | EVM | Alchemy | Supply (BENJI) | 36h |
| Solana | non-EVM | Helius JSON-RPC | Supply, holders (SPL tokens) | 36h |
| Stellar | non-EVM | Public Horizon API | Supply, holders, home_domain anchor | 36h |
| Tron | non-EVM | TronGrid | Supply (USDT, USDC native) | 36h |
§2.2 — Raw data layer
raw_contract_reads
On-chain totalSupply, decimals, NAV/price oracle reads per deployment per block.
raw_holder_snapshots
Top-N holders per chain per instrument per observation, before exclusions.
raw_external_rates
FRED DGS3MO, LBMA PM fix, equity benchmarks — used as independent comparison points.
raw_transfer_events was append-only (no DELETE/UPDATE) while collected. Transfer collection is not active at launch (Alchemy free-tier MVP, 2026-07-04) — the append-only commitment applies to the tables actively collected above, and resumes for this table if transfer collection is restored.
§2.3 — Off-chain ingestion
Attestation events: issuer reserve attestations, audit reports, SEC filings. Ingested at issuer-published cadence.
Published rates: issuer-published APY / NAV. Used in Claim Verifiability oracle-delta computation.
External benchmarks: FRED 3-month T-bill (DGS3MO), LBMA gold PM fix. Never sourced from the issuer — independently collected.
§2.4 — Normalization rules
- 1. Multi-chain supply: each instrument_deployments row is per-chain; scored instrument supply is the sum across all active chains.
- 2. Decimal handling: EVM 18 decimals, Solana 6, Stellar 7, Tron 6 — normalization is per-chain-family.
- 3. Pricing source: peg_one for distributing yield instruments; oracle delta for accumulating_price; LBMA spot × token balance for commodities.
- 4. Yield computation: yield_delta_bps is derived independently from two consecutive oracle reads at known timestamps — not ingested from the issuer's published yield figure.
§2.5 — Freshness SLAs and failure behavior
| Norm table | SLA | Failure behavior |
|---|---|---|
| norm_redemption_liquidity | 36h | Instrument skipped from index entirely |
| norm_disclosure_quality | 36h | Sub-signal scores 0; published as data gap |
| norm_structural_trust | 36h | Sub-signal scores 0 |
| norm_concentration | 36h | Null fallback (8 pts, penalty) |
| raw_external_rates (LBMA) | 5 trading days | Benchmark comparison skipped; flagged in pipeline health |
| raw_external_rates (FRED) | 7 calendar days | Benchmark comparison uses stale rate; known gap (see §2.6) |
§2.6 — Known pipeline limitations (publicly disclosed)
1
Alchemy stale-data silent failure
Below the 36h threshold, stale data can propagate with HTTP 200. The wall-clock vs block_timestamp check is not yet implemented. Effect: a score may be computed from data up to 36 hours old without a visible indicator.
2
FRED publication lag in FOMC weeks
In FOMC weeks, the 7-day lookback window may use a rate 300–500 bps stale relative to the current market. Effect: treasury instruments may score 1–2 bands better than their true market-relative position in the week of a rate move.
3
Off-chain reserve accuracy
We score the existence and freshness of an attestation, not the accuracy of its content. A fraudulent attestation scores identically to an accurate one. This is explicit in every product's §1.x rubric.
Every methodology change, on the record.
Default: no recomputation. Historical scores stay tagged at the version when published.
Chart markers: every post-v1.0 change shows a vertical marker on the index chart at the effective date.
Exclusion additions are not methodology changes (Q8 lock). They apply the unchanged methodology to newly-observed data.
Graduated 36 Dinari dShare instruments on Arbitrum. Claim Verifiability oracle deferred to v2.1 — all instruments score 0 on sub-signal A until oracle ships. Expected composite: 45–67 (Limited / Rated).
Recompute: No (calibration)
Index aggregation widened from primary-deployment-only to all NATIVE deployments across seven chains. USDC adds Base / Arbitrum / Polygon / Solana / Avalanche native mints; USDT adds Tron / Solana / Avalanche; PYUSD adds Solana. Bridged variants (USDC.e, USDbC, etc.) intentionally excluded to avoid double-counting Ethereum-locked supply. Per-instrument scoring methodology unchanged — trust_scores rows remain tagged v1.0-stablecoin. Result: coverage $156B → $269B, Healthy Capital $52B → $70B.
Recompute: No (forward-looking)
Locked rubric: Reserve Quality (single tier table), Redemption Depth (direct + onchain + joint-path bonus), Holder Concentration (Track 1), Transparency (freshness / consistency / regulatory standing at 35/30/35). Healthy ≥ 80.
Recompute: No (calibration)
Locked rubric: 4 dimensions (Disclosure Quality, Redemption Liquidity, Structural Trust, Holder Concentration), each 0–25. Verified ≥ 85, Rated 65–84, Limited 45–64, Unverifiable < 45. Cap rules, per-asset-class weights, custody verification sub-signal. Pre-launch exception: one-time historical recompute.
Recompute: Yes (pre-launch)
Full changelog with references and recomputation notes: /methodology/changelog. Section anchors use the pattern #changelog-vX.Y[-product] and are never renumbered.
Worked example: BUIDL on Ethereum.
BUIDL (BlackRock USD Institutional Digital Liquidity Fund) is the primary worked example because it is publicly known (journalist can verify BlackRock's identity independently), has the richest input surface (SEC N-MFP3 monthly filings, multiple chain deployments, DEX liquidity), and reliably sits in the Verified band. Every step names the exact DB column — readers with future API access can reproduce the query; readers without API access can verify the inputs from public sources (EDGAR, Etherscan, Uniswap).
Step 1 — Chain reads (raw data)
| Input | Source table | Source column | Value on 2026-06-08 |
|---|---|---|---|
| totalSupply (Ethereum primary) | raw_contract_reads | total_supply_raw | $178,606,543 |
| Other chain deployments | instrument_deployments | chain_id, contract_address | See §4.2 (BENJI multi-chain callout) |
Supply feeds the index level and Verified Capital calculation, not the Trust Rating directly.
Steps 2–4 — Disclosure Quality
| Sub-signal | Input | Source column | Value | Score |
|---|---|---|---|---|
| A Claim Verifiability | SEC N-MFP3 (regulated monthly filing) | claim_verifiability_score | peg-NAV: regulated monthly | 19 |
| B Attestation Freshness | Days since last SEC filing | attestation_freshness_age_days | No machine-fetchable attestation surface (age = unknown) | 0 |
| C Disclosure Consistency | Filing count / 180 days | disclosure_consistency_count_180d | 0 attestations in trailing 180 days | 0 |
Cap checks: voluntary_attestation_cap = false (regulated filing, not voluntary)
Cap checks: aggregate_attestation_cap = false (per-instrument N-MFP3)
DQ = 8
Source: norm_disclosure_quality WHERE instrument_id = 'buidl_eth' AND observed_at = '2026-06-08'::date
Step 5 — Redemption Liquidity
| Direct path | direct_redemption_profile = institutional_only | 17 |
| Onchain path (DEX depth) | onchain_path_score from norm_redemption_liquidity | |
| Joint-path bonus | joint_path_bonus_applied | N/A |
| Composite RL | score_redemption_liquidity | 17 |
Step 6 — Structural Trust + Holder Concentration
Structural Trust sub-signals (treasury weights 40/20/40)
| A Regulatory Standing | SEC-registered + PCAOB auditor (BlackRock) | 25 |
| B Governance Quality | governance_quality_score from norm_structural_trust | 19 |
| C Custody Verification | SEC N-MFP3 schedule of investments = full_independent_surface | 25 |
| Composite ST | score_structural_trust | 20 |
Holder Concentration (Track 2 — institutional-direct, $5M minimum)
| top10_pct (post-exclusion) | norm_concentration.top10_holder_pct | 76.67 |
| Concentration score | score_holder_concentration | 18 |
Values from trust_scores for buidl_eth as of 2026-06-08. BUIDL's secondary Ethereum deployment (0x7712...) is the only one with scored history; the new BUIDL-I primary (0x6a9Da..., added 2026-06-08) will populate on the next scoring tick.
§4.2 — Multi-chain reconciliation: BENJI
Franklin BENJI is deployed on Stellar (primary, ~$571M), Solana, Ethereum, Base, Polygon, Arbitrum, and Avalanche. Each deployment is a separate row in instrument_deployments; supply is summed across all active chains. If only Ethereum were counted, the published supply would materially undercount total exposure. The reconciliation logic: join on instrument_id, sum supply_usd across all deployments.
Per-chain supply breakdown updates daily from raw_contract_reads; the live values surface on the BENJI instrument page.
§4.3 — Index level reproduction
From per-instrument scores, the index level and Verified Capital are computed as:
-- Verified Capital SELECT SUM(supply_usd) AS verified_capital_usd FROM trust_scores WHERE scored_at::date = '[date]' AND score_total >= 85; -- Raw Index SELECT SUM(score_total * supply_usd) / SUM(supply_usd) AS raw_index FROM trust_scores WHERE scored_at::date = '[date]';
The live index_levels row is the authoritative published number; re-running these queries against a given as_of date will reproduce it.
§4.4 — Stablecoin Health worked example
Stablecoin Health follows the same six-step walk, with Reserve Quality as the primary dimension input in place of Claim Verifiability. A full USDC walkthrough is published alongside the RWA worked example.
What is in scope, and why.
Journalists citing OCB should qualify the universe: “among OCB-tracked tokenized RWA instruments.” Coverage today is tokenized treasuries and commodities; private credit, real estate, and tokenized equities expand the scope as each category meets the data threshold.
In scope at v1.0
- ·Tokenized US Treasuries and money market funds
- ·Tokenized commodities (gold, silver)
- ·Tokenized public equities and ETFs
- ·Fiat-backed and crypto-backed stablecoins (USD-pegged v1.0)
Methodology-supported, no instruments yet
- ·Private credit (methodology exists; no live instruments in scored population)
- ·Non-USD stablecoins, e.g., EURC (deferred to v1.1)
Out of scope at v1.0 and why
- —Tokenized real estate — no independent, chain-verifiable valuation benchmark
- —Carbon credits — no tradable standardized benchmark
- —DAI (MakerDAO) — Maker CDP collateral mapping required; deferred to v1.1
- —Crypto synthetics marketed as RWA (e.g., Ethena USDtb) — category mismatch
- —Sub-$5M instruments — insufficient institutional scale
Full instrument coverage list
The complete table of active instruments (with chains, status, and current score band) is on the coverage sub-page. Every excluded category is listed with rationale.
View coverage list →How to cite this document.
OnChain Benchmark (2026) 'RWA Quality Index — Methodology v1.0', OnChain Benchmark, retrieved [date], <https://onchainbenchmark.com/methodology#methodology-v1.0>.
OnChain Benchmark. (2026). RWA Quality Index — Methodology v1.0. Retrieved [date], from https://onchainbenchmark.com/methodology#methodology-v1.0
@misc{ocb2026methodology,
author = {{OnChain Benchmark}},
title = {{RWA Quality Index --- Methodology v1.0}},
year = {2026},
url = {https://onchainbenchmark.com/methodology#methodology-v1.0},
note = {Retrieved [date]}
}OnChain Benchmark, "RWA Quality Index — Methodology v1.0" (2026), https://onchainbenchmark.com/methodology#methodology-v1.0.
§6.2 — Permalink discipline
Section anchors in this document are stable across edits. If a section moves, the anchor moves with it — inbound links remain resolvable.
§6.3 — Methodology change requests
A change request qualifies when it identifies a specific scoring framework rule, threshold, or classifier that produces a materially incorrect output given its stated purpose. General disagreement with the methodology does not qualify.
Submit via GitHub issues on the public repository or email the ops address below. The change-control process is published at the methodology changelog.
§6.4 — Contact
Methodology questions: ops@onchainbenchmark.com. No sales CTAs on this page.