How Ozone Scores Work
The Ozone Score is a composite risk score (0–10) assigned to each monitored vault. Lower scores indicate higher risk. The score aggregates three risk dimensions — market, oracle, and protocol — into a single number suitable for monitoring, alerting, and cross-vault comparison.
Ozone Scores are updated on each data snapshot cycle. They reflect the state of the vault at the time of the most recent snapshot, not a prediction of future performance.
Score dimensions
1. Market Risk
Market risk captures the financial exposure of the vault — how it would perform under stress, how close borrowers are to liquidation, and how concentrated liquidity and borrowing are.
Market risk is composed of seven weighted components grouped into three subcategories:
Stress Test (50% of market risk weight)
| Component | Weight | What it measures |
|---|---|---|
| Extreme Event Resilience | 80 (50%) | Expected shortfall under a 10x volatility shock at the 99.99th percentile. Simulated via GBM Monte Carlo with 10,000 iterations over a 365-day horizon. Score = 1 − (LenderES₀.₉₉₉₉ / 100). |
Liquidation Resilience (12.5% of market risk weight)
| Component | Weight | What it measures |
|---|---|---|
| Liquidation Buffer | 20 (12.5%) | Position-weighted average gap between each borrower's current LTV and their liquidation LTV. Score = pool_buffer / 0.2, clamped to [0, 1]. A buffer ≥ 20% scores 1.0; a buffer of 0% scores 0.0. |
Available Liquidity (37.5% of market risk weight)
| Component | Weight | What it measures |
|---|---|---|
| Utilization | 30 (18.75%) | Penalizes high vault utilization using the formula 1 − U^6.579, where U is the utilization rate. At 90% utilization the score drops to 0.5; above 90% it drops steeply. |
| Borrower Nakamoto Coefficient | 5 (3.125%) | Minimum number of borrowers controlling ≥50% of borrowed principal. Score = ln(k) / ln(10), clamped to [0, 1]. A single borrower scores 0; 10+ borrowers score 1. |
| Borrower Max Power Ratio | 5 (3.125%) | Largest borrower's share of total principal. Score = 1 − max_share. |
| LP Nakamoto Coefficient | 10 (6.25%) | Minimum number of LPs controlling ≥50% of supplied liquidity. Same log-scale scoring as Borrower Nakamoto. |
| LP Max Power Ratio | 10 (6.25%) | Largest LP's share of total supplied liquidity. Score = 1 − max_share. |
The market risk score is the weighted sum of all seven components:
pool_market_score = Σ (component_weight / 160) × component_score
2. Oracle Risk
Oracle risk captures the reliability of the price feeds used to value vault collateral. Each oracle contract is scored (0.0–1.0) based on its architecture, governance surface, and dependency risk. Scores are computed at three levels:
- Oracle contract score — per individual feed address, based on source type and contract properties
- Market oracle score — geometric mean of all feeds in a market's price path (penalizes weak links)
- Vault oracle score — allocation-weighted average of market oracle scores
| Oracle source | Typical score | Why |
|---|---|---|
| Chainlink V2 (major pairs, e.g. ETH/USD, USDC/USD) | 0.9–1.0 | Decentralized node network, wide coverage, tight deviation threshold, proven track record |
| Chainlink V2 (thinner coverage) | 0.6–0.7 | Lower liquidity, shorter operational history, or higher spread risk |
| Lido Wrapper + Chainlink | 0.5–0.6 | Two-hop derivation (wstETH → stETH via Lido, then stETH → ETH via Chainlink) — each extra contract adds failure surface |
| ERC-4626 Vault Rate | 0.3–0.4 | Price is totalAssets/totalSupply — accounting-derived, not market-discovered |
| Upgradeable Proxy | 0.1–0.2 | Logic can change without address change (ERC1967/UUPS); admin surface can silently alter price derivation |
| Permissioned ERC-4626 | 0.1–0.2 | Manager-gated vault with redemption queues and transfer restrictions; price may not reflect realizable value |
Why geometric mean for market-level aggregation?
Feeds in a price path are chained dependencies — if one feed fails, the entire price is unreliable. Geometric mean penalizes weak links; arithmetic mean would mask them:
| Feed scores | Geometric mean | Arithmetic mean |
|---|---|---|
| 1.0 and 0.7 | 0.837 | 0.850 |
| 1.0, 0.4, and 0.7 | 0.654 | 0.700 |
| 1.0, 0.2, and 0.7 | 0.519 | 0.633 |
A single permissioned or upgradeable feed (0.2) in a three-feed price chain drops the market oracle score 18% below what a simple average would show. This is intentional — a chain is only as strong as its weakest link.
For the full oracle scoring methodology including tier definitions, deep-dives on specific oracle architectures, and worked examples across Morpho PYUSD markets, see Oracle Risk.
For deeper coverage of each risk dimension, see:
- Market Risk — seven components, formulas, production examples
- Oracle Risk — three-level scoring, tier definitions, geometric mean explainer
- Protocol Risk — six subcategories, governance surface, audit evaluation
3. Protocol Risk
Protocol risk captures the structural and governance properties of the protocol itself, scored across six subcategories:
| Subcategory | What it covers |
|---|---|
| Smart Contract & Teams | Contract discoverability, team identity disclosure, responsiveness to security reports. |
| Documentation | Technical whitepaper, architecture documentation, code documentation coverage, traceability, informativeness. |
| Testing | Test-to-code ratio, test coverage, test reports, formal verification. |
| Security | Protocol auditability, audit applicability matrix, bug bounty program, protocol monitoring, front-end monitoring. |
| Admin Controls & Governance | Code mutability, upgradeability documentation, role clarity, distinct human signers, transaction signing policy. |
| Oracles | Oracle documentation, flash loan robustness. |
Each metric within these subcategories is scored 0–1 and weighted according to its impact on protocol safety.
Probability of Liquidation
Ozone computes a Monte Carlo-simulated probability of liquidation for each vault position. This uses the same underlying engine as the Bitpulse Risk API.
Simulation parameters for the stress test:
| Parameter | Value | Rationale |
|---|---|---|
| Model | GBM (Geometric Brownian Motion) | Standard diffusion model for asset price paths |
| Volatility shock | 9.0 (10x current volatility) | Models a black-swan crisis where portfolio volatility spikes 10-fold |
| Quantile | 0.9999 | Worst 0.01% tail outcomes |
| MC iterations | 10,000 | Sufficient for stable 0.9999 quantile estimation |
| Loan duration | 365 days | Conservative full-year horizon |
| Model lookback | 365 days | Historical window for volatility calibration |
The simulation uses the vault's actual collateral weights, loan weights, and collateral ratios (N, M, L, R parameters) derived from on-chain state.
Score composition
The three dimension scores (market, oracle, protocol) are combined using the geometric mean:
Ozone Score = (market_score × oracle_score × protocol_score)^(1/3) × 10
Geometric mean is used — not arithmetic mean — because a catastrophic weakness in any single dimension should drag the entire composite down. A vault with strong market and protocol scores but a critically weak oracle (e.g. an upgradeable proxy feed) should not score well overall. This mirrors how risk actually behaves: oracle failures correlate with market stress and tend to compound, not average out.
Example — effect of a weak oracle:
| Vault | Market | Oracle | Protocol | Ozone Score |
|---|---|---|---|---|
| All strong | 0.97 | 0.90 | 0.93 | 9.3 |
| Weak oracle | 0.82 | 0.20 | 0.93 | 5.4 |
| Critical oracle | 0.75 | 0.00 | 0.93 | 0.0 |
A score of 0.00 for the oracle dimension (hardcoded price adapter with no price discovery) produces a composite of zero regardless of other scores — the zero-out property of geometric mean.
Scores are bounded [0, 10]. A score of 7+ is considered low risk. A score below 3 triggers critical-tier alerting.
Alert thresholds
| Score range | Risk level | Default alert behavior |
|---|---|---|
| 7.0 – 10.0 | Low | No alert |
| 5.0 – 6.9 | Moderate | Monitoring — no alert by default |
| 3.0 – 4.9 | Elevated | Alert on entry |
| 0.0 – 2.9 | Critical | Immediate alert |
Thresholds are configurable per vault and per metric in the Ozone dashboard.
Limitations
- Scores reflect the most recent snapshot. They do not predict future events.
- Oracle risk metrics depend on on-chain data availability. Protocols without on-chain price feeds may have reduced oracle risk coverage.
- Monte Carlo simulations use historical volatility as a calibration input. In novel market regimes (no historical precedent), estimates carry higher uncertainty.
- Some collateral types are excluded from the stress test if unsupported by the Risk Engine (e.g., Pendle PT tokens, USTB). Excluded collateral weight is reported but does not contribute to the resilience score.
- Concentration metrics (Nakamoto, Max Power) are based on on-chain addresses. A single entity operating through multiple addresses may appear less concentrated than reality.
- The Ozone Score is not a recommendation to buy, sell, or hold any asset. See Terms of Service.
The Ozone Score and all associated risk metrics are provided for informational and institutional monitoring purposes only. They do not constitute financial advice, investment recommendations, or an offer or solicitation to buy or sell any asset or financial instrument. Scores are generated by quantitative models calibrated on historical on-chain data; they are not guarantees of future performance and should not be relied upon as the sole basis for any investment or risk management decision. This platform is intended for use by qualified institutional counterparties in eligible jurisdictions only. See Terms of Service for full terms of use.