Every tracked stablecoin gets a 0–100 risk score every 5 minutes (0 = pegged, 100 = critical depeg). It is a weighted composite of 16 normalized signals. A velocity boost catches escalating crises earlier; hysteresis prevents tier flapping on noisy ticks. Higher always means riskier.
The Final Outputs
| Output | What it Means |
|---|
| Score (0–100) | Overall depeg risk — weighted composite of all signals, adjusted for token type, momentum, and velocity. |
| Tier | ok / watch / warning / critical — bucketed label. Hysteresis-gated to prevent flapping. |
| premium | Special tier: token trading 2%+ above peg with no risk signal present (strong demand badge). |
| State Flags | 6 binary crisis labels surfaced alongside the score: liquidity_crisis, oracle_dislocation, cross_chain_fragmentation, supply_spike_alert, chain_supply_imbalance, death_spiral_candidate. |
| Recommendation (vault overlay) | EXIT / REDUCE / MONITOR / WATCH — actionable signal fed into vault risk scoring when this stablecoin appears as vault collateral or underlying. |
| depeg_sub_score | A separate 0–100 sub-score fed into the vault composite at 5% weight. Measures capital loss risk from peg deviation + persistence, distinct from real-time market stress. |
Risk Tiers
Tier transitions require sustained elevated scores (hysteresis) — see the Hysteresis section below. This prevents a single noisy tick from triggering an alert.
| Tier | Score Range | What It Means |
|---|
| Critical | 70 – 100 | Severe and active depeg risk. Immediate attention required. Vault positions backed by this token should consider exit. |
| Warning | 50 – 69 | Active depeg developing. Monitor closely; multiple signals elevated. Escalation likely if unresolved. |
| Watch | 25 – 49 | Early stress signals present. Track trend across next several ticks. Not yet a confirmed depeg. |
| OK | 0 – 24 | Normal peg conditions. Low risk. Token is liquid, stable, and on-peg across tracked chains. |
| Premium | — | Special: token is trading 2%+ above peg with no risk signal (strong demand). Not a risk indicator. |
Signal Weights (the Building Blocks)
Each signal is normalized to 0–1 before weighting. When a signal has no data for a given token, it is skipped and all remaining weights are renormalized to sum to 1.0 — so missing data never produces a false low score.
Price & Peg Deviation
| Signal | Weight | What It Measures | Max threshold |
|---|
| Price Deviation (5m) | 40% (34% when CEX price present) | Distance from peg using 5-minute VWAP. The single dominant signal — peg is the product’s promise. | 5% deviation → score 1.0 (USD stables). Yield/RWA types have wider tolerance bands. |
| CEX Price Deviation | ~6% | Binance cross-rate price deviation from peg. Active only for USDT, USDC, DAI, and FDUSD. When present, the price_deviation_5m weight is reduced from 40% → 34% to accommodate this signal. Provides an independent centralized-venue confirmation of peg stress. | 5% deviation → score 1.0 |
| Max Drawdown (5m) | 1% | Worst single-tick price drop in the last 5 minutes. | 2% drop in 5 min → 1.0 |
Persistence (Duration Off-Peg)
| Signal | Weight | What It Measures | Max threshold |
|---|
| Persistence (50bp, 60m) | 16% | Minutes spent >0.5% off-peg in the last 60 minutes. A brief spike is noise; 30+ minutes is a pattern. | 60 min continuously at 50bp → 1.0 |
| Persistence (100bp, 60m) | 11% | Minutes spent >1% off-peg in the last 60 minutes. A stiffer threshold for confirmed deviation. | 60 min continuously at 100bp → 1.0 |
Liquidity & Market Depth
| Signal | Weight | What It Measures | Max threshold |
|---|
| Slippage ($100k) | 10% | Estimated slippage for a $100k trade routed on-chain. A proxy for real exit cost. Thin markets = high slippage even before price deviates. | 200 bps (2%) slippage → 1.0 |
| Liquidity Decay | 2% | Decline in available liquidity vs the 24h baseline. A slowly draining pool is a leading depeg indicator. | 100% decay → 1.0 |
| Liquidity Available ($100k) | 1% | Binary: can we route a $100k swap at all? False = illiquid enough to be dangerous. | False → 1.0 |
| Volume Anomaly | 1% | Z-score of 5m and 60m volume vs recent baseline. Penalizes both volume collapse (panic absence of liquidity) and volume spikes (coordinated selling / front-running of a known depeg). | z < −4 (collapse) → 1.0 · z > 4 (spike) → up to 0.5 |
Cross-Chain & Supply
| Signal | Weight | What It Measures | Max threshold |
|---|
| Chain Spread (5m) | 5% | Price dispersion across all chains where the token trades. A 1%+ spread means cross-chain arbitrage has broken down — a leading signal for bridge stress or isolated depeg. | 1% spread → 1.0 |
| Supply Spike | 5% | Anomalous minting — either >10% in 1 hour (rolling) or >5% in a single block. The single-block threshold catches exploit-style emergency mints before price moves. | >10% in 1h OR >5% in 1 block → 1.0 |
Reserve Attestation
| Signal | Weight | What It Measures | Max threshold |
|---|
| Reserve Attestation Staleness | ~4% | How recently the issuer published a third-party reserve attestation or proof-of-reserves. Sourced from data/reserve_attestations.json. | 0 for attestations ≤30 days old; linear ramp to 1.0 at 180+ days. Only scored for tokens with a known attestation source. |
Volatility & Oracle
| Signal | Weight | What It Measures | Max threshold |
|---|
| Volatility Burst | 5% | Sudden price volatility spike vs recent baseline. 5× baseline volatility means the market is in crisis mode, even if price hasn’t moved much yet. | 5× baseline → 1.0 |
| Oracle Deviation | 1% | Gap between on-chain Chainlink feed price and DEX VWAP. A widening gap means oracle is stale or DEX is moving without oracle awareness. | 200 bps gap → 1.0 |
| Oracle Staleness | 1% | Time since last Chainlink heartbeat update. Stale oracles are dangerous in lending markets — they enable overborrowing against inflated collateral. | ≥24h → 1.0 · ≥6h → 0.7 · ≥1h → 0.4 |
| Price Source Disagreement | 1% | Deviation across multiple price sources (DEX, oracle, CoinGecko). Divergence suggests manipulation or data quality issues. | 10% deviation → 1.0 |
DEX/CEX disagreement adjustment: When both DEX and CEX prices are available and disagree — DEX stressed but CEX calm — the DEX price_deviation_5m weight is reduced by 30%, since the stress is likely a DEX-specific liquidity issue rather than a real depeg. The cex_only_stress guard (see below) handles the reverse case: CEX stressed, DEX calm.
Scoring Guards & Modifiers
Six post-computation guards adjust the final score to reduce false positives and prevent single-signal dominance.
| Guard | When it fires | Effect |
|---|
| Persistence gate | Current price deviation is < 0.125% from peg (price_deviation_5m normalized < 0.025) | Persistence signal weights capped at 30% of normal. Prevents 60 minutes of historical off-peg time from dominating the score when price has since fully recovered. |
| Corroboration gate | pool_balance_drift, single_source, or blacklist_activity are active but no other signal has normalized value ≥ 0.10 | Weak signals capped at 40% of normal weight. Requires at least one independent corroborating signal before these signals contribute at full strength. corroboration_gated flag surfaces in drivers. |
| Confluence escalation gate | Score is in Warning tier (50–69) but fewer than 2 signals have normalized value ≥ 0.10 | Tier demoted from Warning → Watch. The numeric score is unchanged; only the tier label changes. confluence_demotion flag surfaces in drivers. Critical tier (≥70) is exempt. |
| supply_spike_gated | Current snapshot shows a supply spike but supply_spike_prev is absent or false (i.e. first appearance — no prior snapshot also showed a spike) | supply_spike signal weight capped at 20% of normal. Full weight restored when spike persists across 2+ consecutive snapshots (~5-10 min). Prevents flash-loan-induced single-snapshot events from driving the score. |
| bridge_flow_spike | bridge_flow_pct > 80% — supply spike is primarily explained by L2 bridge inflows rather than organic minting | supply_spike signal weight reduced to 50% of normal. Prevents bridge activity on Arbitrum, Base, and other L2s from being misread as an exploit or organic demand shock. |
| cex_only_stress | CEX price shows stress (>20 bp deviation) but DEX price is calm (within normal range) | Sentinel driver added to the alert list; score is not increased. CEX stress without DEX confirmation is flagged for investigation rather than scored — it may reflect a CEX-specific issue, a withdrawal freeze, or a pre-depeg signal requiring manual review. |
When any guard fires, a meta-entry (corroboration_gated, confluence_demotion, bridge_flow_spike, cex_only_stress) is appended to the drivers array so the dashboard and alert callers can surface why a tier was adjusted.
Token Type Adjustments
Different token types have fundamentally different expected behaviors. A yield-bearing token like sUSDe is designed to accrue value above $1 — scoring it against a strict $1 peg would produce constant false positives. The model adjusts the price deviation normalization curve per type.
| Type | Allowed Range | Max Deviation Threshold | Examples |
|---|
| Standard USD | $0.99 – $1.01 | 5% deviation = max score | USDC, USDT, DAI, LUSD, crvUSD |
| Yield-bearing | $1.00 – $1.35 (growing) | ±35% of expected yield-growth range | sUSDe, sfrxUSD, sDAI, USDS |
| RWA / Treasury | $1.00 – $1.10 | ±10% of expected NAV | BUIDL, mTBILL, USDY, OUSG |
| Gold-pegged | ±5% of XAU spot | 5% deviation from XAU = max score | PAXG, XAUT |
| FX-pegged | ±10% of FX rate | 10% deviation from EUR/GBP/etc. = max | EURS, agEUR, EURT |
Velocity Momentum & Hysteresis
Velocity Momentum Boost
A rapidly rising score gets a forward boost of up to +15 points, surfacing escalating crises earlier — even before the raw score crosses a tier threshold.
- Velocity — score change per 5-min tick (positive = worsening)
- Boost activates when velocity exceeds 10 pts/tick
- Max boost: +15 points added to effective score
- Accelerating events (velocity itself rising) amplify the boost
Hysteresis (Alert Fatigue Prevention)
Tier transitions require sustained elevated scores. A single noisy tick cannot flip the tier — preventing alert fatigue from short-lived spikes.
- → Critical: 1 tick above threshold (fast — critical is urgent)
- → Warning: 2 consecutive ticks above threshold
- → Watch: 2 consecutive ticks above threshold
- → OK: 2 consecutive ticks below clear threshold (35)
The combination of velocity boost + hysteresis means the system surfaces emerging crises early (momentum) while suppressing false alerts from brief liquidity blips (hysteresis). UST’s 2022 depeg, for example, would have triggered Watch → Warning → Critical over approximately 6 ticks as both the score and velocity accelerated simultaneously.
Low Signal Coverage Guard
When a score reaches ≥50 (Warning range) but fewer than 5 signals have data AND the price is currently at peg, the tier is automatically demoted from warning to watch. This prevents a thin-data token from entering a warning state on the strength of one or two signals alone. All 5+ active signals must agree before a warning is confirmed.
State Flags (Binary Crisis Indicators)
These six flags are computed separately from the numeric score and surfaced alongside it in the API. They name specific crisis types that are active right now — a score of 72 tells you how bad; the flags tell you what kind.
| Flag | Trigger Condition | What It Means |
|---|
liquidity_crisis | Slippage >150 bps OR cannot route $100k OR (slippage >80 bps AND liquidity decay >40%) | The market is too thin to exit a meaningful position without significant price impact. Normal redemption is impaired. |
oracle_dislocation | Oracle deviation >200 bps OR feed stale >24h | The Chainlink feed has significantly diverged from on-chain DEX prices, or has stopped updating. Lending markets relying on this oracle are at risk of enabling under-collateralized borrowing. |
cross_chain_fragmentation | Chain spread >0.5% | The same token is trading at meaningfully different prices on different chains. Cross-chain arbitrage has broken down — typically signals bridge stress or isolated chain liquidity failure. |
supply_spike_alert | Supply minted >5% in 1h OR >2% in a single block | Anomalous on-chain minting detected. Single-block spikes are especially concerning as they match exploit-style emergency mints seen in Terra, IRON Finance, and similar. |
chain_supply_imbalance | On-chain supply on one chain exceeds DeFiLlama per-chain circulating by ≥20% | The tracked on-chain supply does not match the official circulating supply data. A leading indicator of bridge exploits or unbacked minting. |
death_spiral_candidate | Adjusted price deviation >2% AND persistence >20 min AND (liquidity decay >30% OR slippage >100 bps OR liquidity unavailable) | Multi-signal stress confluence. Price is off-peg, it has been sustained, and exit liquidity is deteriorating simultaneously. This is the pattern seen in terminal depeg events. Requires immediate attention. Note: yield and RWA tokens apply type-adjusted deviation thresholds so expected trading premiums do not trigger this flag. |
How Depeg Risk Feeds into Vault Scoring
The live depeg monitor output is merged into every vault’s composite risk score via the depeg overlay module. It runs at pipeline time, applies the worst-case signal across all chains where the underlying token trades, and contributes to the vault composite at 5% weight.
depeg_sub_score vs monitor score
The monitor score measures real-time market stress (all 16 signals: slippage, persistence, supply, oracle). The depeg_sub_score fed into the vault composite is narrower — it focuses on capital loss risk from peg deviation and persistence alone, plus a floor from the monitor score to catch liquidity collapse events even before price moves.Vault Recommendation Actions
When a depeg is active, the overlay generates a recommendation for vault holders:
- EXIT — critical tier + ≥30% peg deviation
- REDUCE — critical + ≥5% deviation
- MONITOR — critical/warning + any deviation
- WATCH — warning tier OR score ≥50
| depeg_sub_score Component | Contribution |
|---|
| Peg deviation score (graduated) | Base: 0.1% dev → 5pts · 0.5% → 15pts · 1% → 30pts · 2% → 50pts · 3% → 65pts · 5%+ → 80–95pts |
| Persistence bonus | +10 pts max after 120 minutes of continuous off-peg deviation |
| Monitor score floor | max(peg_score + bonus, monitor_score × 15%) — ensures liquidity collapse is not ignored even when price hasn’t moved yet |
| Supply spike boost | +5 to +20 pts when minted_24h_pct >40% (large unexpected minting alongside any deviation is a danger signal) |
| Final cap | 0–100 range; fed into vault composite at 5% weight |
API Response Fields
The /api/latest endpoint returns a snapshot of every tracked token. Vault objects from /api/vaults include monitor_tier and per-composition depeg_score.
| Field | Type | Description |
|---|
score | number (0–100) | Live composite risk score. Higher = riskier. |
tier | string | ok / watch / warning / critical / premium |
abs_dev_clean | number | null | Absolute peg deviation (clean, outlier-stripped) |
ts | number | Snapshot timestamp (epoch ms) |
symbol | string | Token symbol (USDC, USDT, etc.) |
chain | string | Chain where this snapshot was taken |
address | string | Token contract address |
monitor_tier | string | null | (Vault field) Live risk tier for the vault’s underlying token — watch / warning / critical / null |
depeg_score | number | null | (Vault composition field) Monitor score for each token in the vault’s composition |
Signal Weight Hierarchy at a Glance