Methodology
How Pharos grades stablecoins: transparent scoring across safety, peg stability, liquidity, yield, and contagion risk. Treat this page like a reference manual, not a marketing explainer.
Reader Guide
Reader mode keeps summaries up front. Switch to Analyst for formulas, caveats, and worked examples.
Page rhythm: summary, quick facts, worked example, technical notes.
Reader Guide
Reader mode keeps summaries up front. Switch to Analyst for formulas, caveats, and worked examples. Use the jump rail toggle to switch modes without losing your place in the page.
Jump to Section
Stability IndexVersion increments when PSI formula, caps, bands, or component definitions change.
The Pharos Stability Index (PSI) is a market-level 0–100 health score for the stablecoin ecosystem. It is recomputed every 15 minutes from live depeg conditions and stress signals, then aggregated into daily history snapshots.
Update cadence
15m refresh
Score range
0-100 market health
Main use
Bands: BEDROCK to MELTDOWN
Preconditions & Failure Modes
Minimum data
Scorer accepts empty depeg sets, but requires total market cap > 0
Required sources
Market-cap totals + active depeg inputs (DEWS breadth optional)
Failure behavior
Returns null when market-cap input is missing/<=0; cron skips that sample and API serves last valid value
Worked example (verified against computeStabilityIndex)
Inputs: bps=-120, depegMcap=$2B, totalMcap=$200B, age=10d, trend=+1.2, stressBreadth=1.5
severity=1.141, breadth=4.243, score=100-1.141-4.243-1.5+1.2=94.316→94.3
Result: PSI 94.3 (BEDROCK).
Technical details: formula, component math, depeg handling, and condition bands
Scoring Formula
Score = 100 − severity − breadth − stressBreadth + trendThe final value is clamped to [0, 100] and rounded to one decimal.
Severity
0–68
Breadth
0–17
Stress Breadth
0–5
Trend
−5 to +5
Compute PSI
100 − penalties + trend
Condition Band
BEDROCK through MELTDOWN
Severity
0–68
Breadth
0–17
Stress Breadth
0–5
Trend
−5 to +5
Compute PSI
100 − penalties + trend
Condition Band
BEDROCK through MELTDOWN
Components
| Component | Range | Formula | Purpose |
|---|---|---|---|
| Severity | 0–68 | min(68, Σ(abs(bps)/100 × share × log2(1+mcap/1B) × 60 × factor)) | Magnitude-weighted depeg damage with extra emphasis on mega-cap instability |
| Breadth | 0–17 | min(17, Σ(sqrt(mcap/1B) × 3 × factor)) | How widely depegs are spreading across unique coins |
| Stress Breadth | 0–5 | min(5, dewsStressBreadth) | Early-warning pressure from DEWS stress signals before full depegs |
| Trend | −5 to +5 | clamp(-5, 5, mcap7dChangePct) | 7-day stablecoin market-cap momentum (supports or offsets penalties) |
Depeg Handling Rules
- Per-coin deduplication: active events are grouped by coin; each coin contributes once using the worst current deviation.
- Age-aware depreciation: fresh depegs get full weight for 30 days, then decay linearly to a 25% floor over 120 days.
factor = ageDays ≤ 30 ? 1.0 : max(0.25, 1.0 − (ageDays − 30)/120)Condition Bands
| Range | Band | Meaning |
|---|---|---|
| 90–100 | BEDROCK | Near-ideal market stability |
| 75–89 | STEADY | Normal conditions with minor stress |
| 60–74 | TREMOR | Meaningful instability emerging |
| 40–59 | FRACTURE | Broad, significant market stress |
| 20–39 | CRISIS | Contagion-level instability |
| 0–19 | MELTDOWN | Systemic peg failure conditions |
Version increments when weights, thresholds, or dimension definitions change.
Pharos synthesizes multiple data signals into a single transparent grade per stablecoin. The overall score is computed in two steps: first, a weighted average of four base dimensions (liquidity, resilience, decentralization, dependency risk), then a peg stability multiplier that penalizes coins with poor pegs while barely affecting well-pegged ones. When some base dimensions lack data (NR), their weight is redistributed proportionally among rated ones.
Model shape
4 dimensions + peg multiplier
Grade output
A+ to F, with NR
Key caveat
No DEX data = 10% penalty
Preconditions & Failure Modes
Minimum data
At least 2 rated non-peg dimensions
Required sources
Peg summary, DEX liquidity, and dependency/metadata inputs
Failure behavior
NR if peg is missing on non-NAV coins; no-liquidity applies 0.9 multiplier
Worked example (verified against computeOverallGrade)
Inputs: Liq 80, Res 70, Decen 60, Dep 75, Peg 92
base=(80*0.30+70*0.20+60*0.15+75*0.25)/0.90=73.06
final=round(base*(92/100)^0.20)=round(73.06*0.9835)=72
Result: Score 72 (grade B).
Technical details: full pipeline, dimension formulas, thresholds, and caveats
Liquidity
30%
Resilience
20%
Decentralization
15%
Dependency Risk
25%
Weighted Average
base score
× Peg Multiplier
(pegScore / 100)0.20
× No-Liquidity Penalty
0.9× if no DEX data
Final Grade
A+ through F
Liquidity
30%
Resilience
20%
Decentralization
15%
Dep. Risk
25%
Weighted Average
base score
× Peg Multiplier
(pegScore / 100)0.20
× No-Liquidity Penalty
0.9× if no DEX data
Final Grade
A+ through F
Base Dimensions (weighted average)
| Dimension | Weight | Source | Description |
|---|---|---|---|
| Liquidity | 30% | DEX liquidity score | Direct passthrough of the liquidity score (see below) |
| Resilience | 20% | Collateral, custody, blacklist | Structural resilience across 3 equally-weighted sub-factors |
| Decentralization | 15% | Governance type, chain risk | Governance structure with chain-risk penalty |
| Dependency Risk | 25% | Upstream grades, collateral weights | Inherited risk from upstream stablecoins, weighted by exposure |
Peg Stability Multiplier
After computing the base score, peg stability is applied as a power-curve multiplier: final = base × (pegScore / 100)0.20. Coins with strong pegs (90+) are barely affected (~2% penalty), while coins with broken pegs are properly penalized (e.g. pegScore 10 → 37% penalty). NAV tokens (pegScore = NR) receive multiplier 1.0 since peg tracking does not apply to them.
No-Liquidity-Data Penalty
A further 0.9× multiplier is applied when a coin has no DEX liquidity score (NR). No free pass — as DEX liquidity coverage matures, the absence of liquidity data is increasingly suspicious. The 30% weight would normally be redistributed to other dimensions, effectively inflating the overall score; this multiplier corrects for that by applying a flat 10% penalty instead.
Resilience Scoring
Average of three equally-weighted sub-factors (~33% each). Chain infrastructure is scored exclusively in the Decentralization dimension.
| Sub-factor | What it measures | Scoring |
|---|---|---|
| Collateral Quality | Reserve composition risk | Weighted avg of curated reserve slices: Very Low (100), Low (75), Medium (50), High (25), Very High (5). Falls back to enum scoring for coins without curated reserves. |
| Custody Model | Who holds the collateral? | Fully on‑chain (100), Institutional custodian (50), CEX/off‑exchange (0) |
| Blacklist Capability | Can the issuer freeze holder funds? | No (100), Possible (mutable contract) (66), Possible (inherited — ≥25% of reserves backed by blacklistable coins such as USDC/USDT) (66), Yes (33) |
Collateral quality is derived from curated reserve compositions when available — each reserve slice is classified into one of five risk tiers and the score is their weighted average. For coins without curated reserves, a coarser enum-based fallback is used. Explicit overrides exist for coins where defaults are incorrect (e.g., protocols on Solana, coins with CEX custody).
Decentralization Scoring
Base score from governance quality tier, then a chain-risk penalty for protocols on less decentralized chains — governance decentralization is undermined when the underlying chain has centralisation concerns:
- Immutable code — 100 (no admin keys, no upgrade path — e.g. LUSD, BOLD). Exempt from chain-risk penalty
- DAO governance — 85 (e.g. DAI)
- Multisig — 55 (e.g. GHO, FRAX)
- Regulated entity — 40 (named regulator, license, and independent audit — e.g. USDC, USDT)
- Single entity — 20 (unregulated or unverified issuer)
- Wrapper — 10 (inherits upstream governance)
Chain-risk penalty (DAO, multisig, and wrapper governance — exempt for immutable-code, regulated-entity, single-entity):
- Ethereum — no penalty
- Stage 1+ L2 — −15
- Established alt-L1 — −50
- Unproven chain — −65
Example: hyUSD (DAO governance, Solana) = 85 − 50 = 35. USDB (multisig, Blast L2) = 55 − 15 = 40.
Dependency Risk Scoring
Two-phase computation ensures upstream scores are available before dependent coins are graded. Phase 1 grades independent coins (centralized & decentralized), then Phase 2 grades CeFi-Dependent coins using Phase 1 results.
- Non-dependent coins — score 95 (no upstream risk)
- With mapped dependencies — blended score: each upstream's grade is weighted by its collateral fraction, and the self-backed portion (non-stablecoin collateral) scores vary by governance type (decentralized 90, centralized-dependent 75, centralized 95). A −10 penalty applies if any upstream dependency scores below 75
- Unmapped dependencies — falls back to 70 when dependencies aren't mapped or scores are unavailable
Dependency type ceilings — each dependency is classified as wrapper, mechanism-critical, or collateral (default). Wrappers (e.g., syrupUSDC → USDC) are thin layers around the upstream — their score is capped at upstream − 3. Mechanism-critical dependencies (e.g., DAI → USDC via PSM) are essential to the peg — score is capped at the upstream's score. Collateral dependencies use the blended formula with no ceiling.
Self-backed scores vary by governance type: centralized-dependent coins score 75 (systemic coupling risk), decentralized coins 90, and centralized coins 95. Centralized-dependent coins score lower because their peg mechanisms depend on upstream stablecoin infrastructure even for non-stablecoin collateral.
Grade Thresholds
| Grade | Score Range |
|---|---|
| A+ | 87–100 |
| A | 83–86 |
| A− | 80–82 |
| B+ | 75–79 |
| B | 70–74 |
| B− | 65–69 |
| C+ | 60–64 |
| C | 55–59 |
| C− | 50–54 |
| D | 40–49 |
| F | 0–39 |
| NR | Not enough data |
Key Design Decisions
- NR (Not Rated) is used when fewer than 2 base dimensions have data — no misleading partial grades
- Weight is redistributed proportionally among rated base dimensions when some are NR
- Peg stability acts as a multiplier, not a base dimension — maintaining a peg is table stakes, not a differentiator
- Cemetery (defunct) coins receive a permanent F
- Decentralization score is structural, not a value judgment
- Blacklist inheritance: stablecoins where ≥25% of reserves (by weight) are backed by first-order blacklistable coins are flagged as “possible-inherited” blacklist risk
Dependency Ceilings
When a stablecoin depends on another (wrapper, mechanism, or collateral relationship), its dependency risk score is capped relative to its upstream:
- Wrapper dependency: capped at upstream score minus 3 points
- Mechanism dependency: capped at upstream score
- Collateral dependency: blended into dependency risk dimension via weighted average
If any upstream dependency scores below 75, a 10-point penalty is applied. These ceilings prevent a wrapped token from outscoring its underlying asset.
Limitations
- Peg stability only reflects price data — can't detect coins “stable” because nobody trades them
- Decentralization is structural, not a value judgment
- Dependency map is manually maintained — may not capture every collateral relationship
Version increments when liquidity formula weights, source inclusion rules, or TVL normalization logic changes.
Composite 0–100 score measuring DEX liquidity depth per stablecoin, updated every 30 minutes. Aggregates pool data across all major DEXes and chains.
After bad pools are filtered and secondary-source TVL caps are applied, every exported aggregate and score input is rebuilt from the retained pool set. That keeps filtered or downscaled pools from lingering in the final score through stale pre-filter totals.
Update cadence
30m refresh
Signal mix
6 weighted liquidity components
Output
0-100 DEX depth score
Preconditions & Failure Modes
Minimum data
No hard minimum in scorer; missing stability history defaults to neutral 50 sub-scores
Required sources
Pool TVL/volume/chain data plus mechanism and pair-quality metadata
Failure behavior
If liquidity score is null/missing, report-card liquidity dimension is NR
Worked example (verified against computeLiquidityScore)
Inputs: effectiveTVL=$25M, TVL=$20M, volume24h=$8M, qualityTVL=$18M, durability=68, pools=12
tvlDepth=67.96, volume=63.37, quality=65.11, pair=60
score=round(0.35*67.96+0.20*63.37+0.225*65.11+0.15*68+0.075*60)=66
Result: Liquidity score 66.
Technical details: component weights, TVL scaling, and quality adjustments
TVL Depth
35%
Volume Activity
20%
Pool Quality
22.5%
Durability
15%
Pair Diversity
7.5%
Liquidity Score
0–100
TVL Depth
35%
Vol. Activity
20%
Pool Quality
22.5%
Durability
15%
Pair Diversity
7.5%
Liquidity Score
0–100
Components
| Component | Weight | How it works |
|---|---|---|
| TVL Depth | 35% | Log-scale effective TVL (quality-adjusted, metapool-deduped): $100K→20, $1M→40, $10M→60, $100M→80, $1B+→100 |
| Volume Activity | 20% | Log-scale V/T ratio: 33.3×log10(vtRatio/0.005). ~0.5%→13, ~5%→56, ~50%→100 |
| Pool Quality | 22.5% | Quality-adjusted TVL using pool mechanism multiplier × balance health × pair quality. Curve StableSwap (A≥500) = 1.0×, Uni V3 1bp = 1.1×, generic AMM = 0.3× |
| Durability | 15% | TVL stability (35%), volume consistency (25%), pool maturity (25%), organic fee fraction with sqrt curve (15%) |
| Pair Diversity | 7.5% | Pool count with diminishing returns: min(100, poolCount × 5) |
Pool Quality Adjustments
- Balance health — continuous ratio (not binary threshold): pools with imbalanced reserves score lower
- Pair quality — co-token scored by Pharos governance classification (CeFi→1.0, DeFi→0.9, CeFi-Dep→0.8) plus static map for volatile assets (WETH→0.65, WBTC→0.6)
- Metapool dedup — uses TVL excluding base pool to prevent double-counting across Curve metapools
- Retained-pool recomputation — HHI, depth, volume, and balance/organic/durability inputs are all recomputed from the same retained pool set before the UI truncates to the top 10 displayed pools
Version increments when flow scoring logic, tracked event semantics, or ingestion attribution policies change.
Pharos tracks on-chain mint and burn events for major stablecoins via Alchemy JSON-RPC (Transfer mints/burns plus USDT Issue/Redeem). These raw events are aggregated into hourly buckets and exposed as two separate signals: raw net flow for current direction, and a baseline-relative pressure score for context. Counted flow excludes bridge burns, review-required burns, and atomic roundtrips.
Data source
On-chain mint + burn events
Primary score
Pressure Shift vs 30D
Main outputs
Net flow, gauge, and FtQ
Preconditions & Failure Modes
Minimum data
Pressure Shift vs 30D requires at least 7 days of flow history per coin
Required sources
24h mint/burn totals plus 30-day baseline aggregates
Failure behavior
Pressure shift can be null (NR); gauge is null when no weighted inputs contribute; FtQ needs ±$100M dual threshold
Counted rows
Economic-flow aggregates count standard mints plus effective burns only
Worked example (verified against computeFlowIntensity)
Inputs: currentNet=-$0.2M, baselineNet=-$7.5M, baselineAbs=$40M
denominator=max(40M*0.3,1M)=12M; z=(-0.2M-(-7.5M))/12M=0.608
pressureShift=clamp(-100,100,z*50)=30.4
Result: still burning today, but much lighter than its baseline.
Technical details: two-signal pipeline, pressure formula, and gauge bands
Mints
Transfer from 0x0
Burns
Transfer to 0x0
Hourly Buckets
Trailing 30 closed daily Ethereum buckets
Net Flow 24h
Current mint minus burn direction
Pressure Shift vs 30D
-100 worsening · 0 baseline · +100 improving
Bank Run Gauge
market-cap weighted
Flight-to-Quality
dual threshold detection
Mints
Transfer from 0x0
Burns
Transfer to 0x0
Hourly Buckets
Trailing 30 closed daily Ethereum buckets
Net Flow 24h
Current mint minus burn direction
Pressure Shift vs 30D
-100 worsening · 0 baseline · +100 improving
Bank Run Gauge
market-cap weighted
Flight-to-Quality
dual threshold
Net Flow 24h
Net Flow answers the first question directly: is a coin minting or burning right now? It is the raw 24-hour mint volume minus burn volume.
- Minting — `netFlow24hUsd > 0`
- Burning — `netFlow24hUsd < 0`
- Flat — `netFlow24hUsd = 0` with activity
- No activity — no 24h mint/burn events in the window
- Invariant — minting vs burning always comes from raw net flow, never from the pressure score sign
Pressure Shift vs 30D
This is the existing Flow Intensity formula under clearer naming. It measures how far current 24-hour flow pressure deviates from the coin's own trailing 30 fully closed daily Ethereum baseline.
denominator = max(baselineDailyAbs × 0.3, $1M)
z = (currentDailyNet − baselineDailyNet) / denominator
pressureShift = clamp(-100, 100, z × 50)
- Baseline period — trailing 30 fully closed UTC days of Ethereum daily net flows and absolute volumes, excluding the current partial day
- Minimum data — requires 7 days of history; returns null (NR) otherwise
- Activity gate — windows with no 24h mint/burn activity or less than $50K absolute 24h flow are marked NR and excluded from gauge weighting
- Ingestion safety — sync state advances only to the shared safe coverage frontier when some event definitions or block timestamps are incomplete
- Floor — denominator is floored at $1M to prevent noise in low-volume coins
- Interpretation — above +10 = improving vs baseline, between -10 and +10 = stable vs baseline, below -10 = worsening
Bank Run Gauge
Market-cap-weighted composite of all tracked coins' pressure-shift values, producing a single ecosystem-wide Ethereum flow-pressure reading. The gauge score maps to one of seven condition bands:
| Band | Score Range | Meaning |
|---|---|---|
| CRISIS | −100 to −70 | Severe below-baseline redemption pressure across major coins |
| STRESS | −70 to −40 | Worsening coordinated pressure versus normal conditions |
| CAUTIOUS | −40 to −10 | Mild but broad pressure deterioration |
| NEUTRAL | −10 to 10 | Close to 30D norms across the market |
| HEALTHY | 10 to 40 | Improving aggregate pressure versus baseline |
| CONFIDENT | 40 to 70 | Strong positive pressure shift across major coins |
| SURGE | 70 to 100 | Exceptional improvement versus recent norms |
Returns null only when all tracked coins are NR (for example, insufficient history or no 24h mint/burn activity). Coins with null pressure-shift values are skipped from the market-cap-weighted composite.
Flight-to-Quality Detection
Detects capital rotation from risky to safe-haven stablecoins — a pattern typically seen during market stress when holders move funds from algorithmic or less-established coins into fully-backed centralized stablecoins.
- Safe classification — centralized governance with real-world-asset backing (USDT, USDC, FDUSD, PYUSD)
- Dual threshold — active when risky coins have >$100M net outflows AND safe coins have >$100M net inflows simultaneously over 24h
- Intensity scaling — min(100, |riskyOutflows| / $1B × 100), reflecting the magnitude of the rotation
Version increments when APY source resolution, source arbitration, history semantics, PYS scoring logic, or eligibility rules for discovered yield sources change.
Pharos tracks yield-bearing stablecoins and computes a risk-adjusted ranking via the Pharos Yield Score (PYS). Data is refreshed every 30 minutes using a source-aware APY resolution strategy, with alternative sources retained when multiple valid yield paths exist and confidence-weighted arbitration selecting the primary row.
Update cadence
30m refresh
APY priority
Confidence-weighted across deterministic, curated, and fallback sources
Output
PYS (0-100)
Preconditions & Failure Modes
Minimum data
Need one resolved APY source; deterministic exchange-rate sources additionally need prior source-specific history
Required sources
Direct on-chain reads, curated DeFiLlama pools, rate-derived benchmark inputs, or 30d price history
Failure behavior
No resolved source skips coin update; PYS returns 0 when apy30d <= 0 (safety defaults to 40 if missing), while degraded benchmark or safety inputs are surfaced in provenance
Worked example (verified against computePYS)
Inputs: apy30d=8.4, safetyScore=72, apyVarianceScore=0.18, scalingFactor=5
riskPenalty=max(0.5,(101-72)/20)=1.45; yieldEfficiency=8.4/1.45=5.79; sustainability=1-0.18=0.82
PYS=min(100, round(5.79*0.82*5))=24
Result: PYS 24.
Technical details: APY source resolution, confidence arbitration, PYS formula, NAV handling, and limits
Tier 1
Direct on-chain reads
Tier 2
DeFiLlama pools
Tier 3
Price- or rate-derived fallback
APY
first successful tier
Yield Efficiency
APY ÷ risk penalty
Sustainability
penalises high variance
PYS Score
0–100
Tier 1
On-chain reads
Tier 2
DeFiLlama
Tier 3
Price-derived
APY
first successful tier
Yield Efficiency
APY ÷ risk penalty
Sustainability
penalises variance
PYS Score
0–100
APY Resolution and Source Arbitration
- Tier 1 — Direct on-chain reads: reads protocol state directly, either as an exchange-rate delta (e.g. sUSDe) or a conservative reward-only estimator (e.g. LUSD B.Protocol Stability Pool, LQTY only)
- Tier 2 — DeFiLlama pools: matches the coin to a DeFiLlama yield pool via static mapping or symbol-based fallback
- Tier 3 — Price-derived: for NAV tokens only, derives APY from the 30-day price appreciation in supply_history
- Tier 4 — Rate-derived: for dividend-distributing and Treasury-tracking tokens, derives APY from the cached 3-month Treasury benchmark net of known fee spreads
Deterministic and curated paths can all contribute rows, then a confidence-weighted arbitration layer chooses the best row. Divergent discovered or fallback sources can be demoted or rejected when a canonical source disagrees materially.
Trailing APY metrics are computed from source-specific history rather than a mixed coin-level series, so source switches no longer contaminate the displayed 7d/30d averages.
Pharos Yield Score (PYS)
riskPenalty = max(0.5, (101 − safetyScore) / 20)
yieldEfficiency = apy30d / riskPenalty
sustainability = max(0.3, 1.0 − apyVarianceScore)
PYS = min(100, yieldEfficiency × sustainability × scalingFactor)
- Yield efficiency rewards higher APY relative to the coin's risk profile — safer coins get a lower penalty divisor
- Sustainability multiplier penalizes volatile yields (high variance over 30 days), favouring consistent returns
- Scaling factor is a global constant that normalises scores into the 0–100 range
NAV Token Handling
NAV-appreciating tokens (e.g. sDAI, wUSDM, BUIDL) are not covered by the report card framework's safety grading — they receive a default safety baseline of 40 (NR). Their PYS is therefore derived primarily from APY magnitude and variance rather than a full safety assessment. As the grading framework expands to cover NAV tokens, their PYS will become more nuanced.
Limitations
- Trailing averages require sufficient history — newly tracked coins may show unstable scores until 30 days of data accumulate
- DeFiLlama pool matching uses heuristics; pool mismatches are corrected via the static override map
- The LUSD B.Protocol Stability Pool row is conservative by design: it includes projected LQTY incentives only and excludes ETH liquidation gains
- Price-derived APY (Tier 3) can be noisy for low-liquidity NAV tokens
Version increments when depeg thresholds, confirmation policy, peg-score formula terms, or DEWS signal composition changes.
PegScore observes the past and present by scoring realized peg behavior, while DEWS is forward-looking and tries to anticipate future depeg risk before it fully manifests.
Depeg Tracker combines live event detection, secondary-source confirmation rules for large-cap assets, low-confidence primary prices, and extreme moves, plus a per-coin peg score that penalizes time off peg, event severity, active depegs, and unstable event spread.
DEX cross-validation uses explicit trust gates. Detection and pending confirmation only trust fresh DEX rows with at least $1M of aggregate source TVL, while the public DEX Price Check UI requires a lighter but still non-trivial floor of $250K.
DEWS (Depeg Early Warning System) computes forward-looking stress every 15 minutes from market, liquidity, confidence, flow, and yield signals, with optional PSI-based amplification during systemic stress.
PegScore focus
History: realized peg behavior
DEWS focus
Forward stress probability
Refresh
15m refresh
Preconditions & Failure Modes
Minimum data
PegScore requires >=30 tracking days; DEWS requires >=2 available signals (total weight >=0.30)
Required sources
Peg events + tracking window inputs; DEWS consumes supply/liquidity/price plus optional flow/blacklist/yield signals
Failure behavior
PegScore can be null; DEWS also returns null when signal coverage is below threshold
Worked examples (verified against computePegScore and computeDEWS)
PegScore input: 100-day tracking window, 1 event (2 days, 220 bps, inactive)
pegPct=98.0, severityScore=99.86, spread=0, activePenalty=0 → pegScore=99
DEWS input signals: supply=40, pool=55, liq=25, price=0, diverg=10 (others unavailable), psiScore=70
base=(0.25*40+0.2*55+0.15*25+0.15*0+0.15*10)/0.9=29.17; PSI amplifier=1.02 → DEWS=30
Result: PegScore 99 and DEWS 30 (WATCH).
Technical details: PegScore formula, DEWS signals, weights, and threat bands
PegScore
Composite 0–100 score measuring how faithfully a stablecoin holds its peg. The tracking window spans up to 4 years but is capped at the coin's actual age (earliest supply snapshot), so young coins are not diluted across history they didn't exist for. Requires at least 30 days of tracking data; returns null otherwise.
PegScore Formula
pegScore = 0.5 × pegPct + 0.5 × severityScore − activeDepegPenalty − spreadPenalty
Time-at-Peg
50%
Event Severity
50%
− Penalties
active depeg + spread
PegScore
0–100
Time-at-Peg
50%
Event Severity
50%
− Penalties
active depeg + spread
PegScore
0–100
PegScore Components
| Component | Weight | Range | How it works |
|---|---|---|---|
| Time-at-Peg (pegPct) | 50% | 0–100 | Percentage of time spent at peg. Overlapping depeg intervals are merged to avoid double-counting |
| Event Severity | 50% | 0–100 | Penalizes magnitude, duration, and recency of each depeg event. Per-event penalty: max(durationPenalty, magnitudeFloor), where durationPenalty = (peakBps / 100) × (durationDays / 30) × recencyWeight, magnitudeFloor = (peakBps / 2000) × recencyWeight. The floor ensures even brief depegs carry a minimum penalty proportional to their severity. Recency weight = 1 / (1 + yearsAgo) so recent events count more. Duration capped at 90 days |
| Active Depeg Penalty | subtracted | 5–50 | Applied only if an ongoing depeg exists (no end date). Scales with severity: clamp(absBps / 50, 5, 50) |
| Spread Penalty | subtracted | 0–15 | Standard deviation of peak deviations across events, scaled. Penalizes erratic, unpredictable depeg behaviour. Only applies when ≥2 events exist |
DEWS
DEWS is a per-coin, forward-looking stress score (0–100) estimating depeg probability. It is computed every 15 minutes from 8 sub-signals. Only signals with available data participate; weights are redistributed proportionally across available signals.
Supply Velocity
0.25
Pool Balance Drift
0.20
Liquidity Erosion
0.15
Price Confidence
0.15
Cross-Source Divergence
0.15
Blacklist Activity
0.10
Mint/Burn Flow
0.10
Yield Anomaly
0.05
DEWS
Σ(W⋅S) / Σ(W)
0–100
CALM
0–15
WATCH
16–35
ALERT
36–55
WARNING
56–75
DANGER
76–100
Supply Velocity
0.25
Pool Balance Drift
0.20
Liquidity Erosion
0.15
Price Confidence
0.15
Cross-Source Div.
0.15
Blacklist Activity
0.10
Mint/Burn Flow
0.10
Yield Anomaly
0.05
DEWS
Σ(W⋅S) / Σ(W) — 0–100
CALM
0–15
WATCH
16–35
ALERT
36–55
WARN
56–75
DANGER
76–100
Score Formula
DEWS = round(clamp(0, 100, sum(W_i × S_i) / sum(W_i)))
At least 2 available signal sources (total weight ≥ 0.30) are required; otherwise DEWS returns null.
Sub-Signals & Weights
- Supply Velocity (0.25) — rapid redemptions (bank run), measured from 1-day and 7-day supply contraction rates
- Pool Balance Drift (0.20) — one-sided selling pressure in DEX pools, blending balance stress, pool stress, and worst-pool imbalance
- Liquidity Erosion (0.15) — LPs fleeing, measured from 7-day changes in liquidity score and TVL
- Price Confidence (0.15) — oracle/data source failures, mapping confidence levels to stress values
- Cross-Source Divergence (0.15) — fragmented pricing between primary price, DEX price, and peg reference
- Blacklist Activity (0.10) — issuer emergency freeze surges for USDC, USDT, PAXG, XAUT
- Mint/Burn Flow (0.10) — redemption surge vs minting from on-chain Transfer event data
- Yield Anomaly (0.05) — warning-signal accumulation from yield spikes, divergence, TVL outflows, negative trends, and reward-heavy regimes
Threat Bands
- CALM (0–15) — no stress signals detected
- WATCH (16–35) — mild stress on 1–2 indicators
- ALERT (36–55) — multiple indicators elevated
- WARNING (56–75) — strong stress signals, depeg plausible
- DANGER (76–100) — all precursors firing
Edge Cases
- NAV tokens are excluded entirely (price appreciates, not pegged)
- Non-USD pegs: cross-source divergence is dampened by 0.7 (noisier FX pricing)
- Small coins (<$50M): supply velocity is dampened via a logarithmic size factor
- Missing DEX data: pool and liquidity signals marked unavailable, weight redistributed
Contagion Stress Test
The stress test simulates dependency failures to reveal systemic concentration risk across the stablecoin ecosystem.
Simulation action
Force one coin to grade D
Propagation channel
Dependency channel only
Primary output
Affected coins + supply at risk
Preconditions & Failure Modes
Minimum data
Target coin must have dependents and mapped dependency weights
Required sources
Current report-card scores plus dependency map inputs
Failure behavior
Only direct dependency-risk channel is recomputed (no peg/liquidity/confidence feedback loops)
Worked example (verified against scoreDependencyRisk path used by stress test)
Override upstream score to 40; dependent coin has 60% exposure and decentralized self-backed score 90
blended=0.6*40+0.4*90=60; weak-upstream penalty (score<75) applies -10
dependencyRisk score=50
Result: Dependency dimension falls to 50 before overall grade recomputation.
Technical details: simulation pipeline, scoreboard logic, and limitations
Select Target
pick a coin
Override to D
force downgrade
Recompute Dep. Risk
cascade upstream
Impact Report
coins & $ at risk
Select Target
pick a coin
Override to D
force downgrade
Recompute Dep. Risk
cascade upstream
Impact Report
coins & $ at risk
Systemic Risk Scoreboard
On page load, the scoreboard pre-computes the five most damaging single-coin failure scenarios. For each targetable coin (one that has dependents), it simulates a downgrade to D, counts the number of affected coins, and sums their market cap as “supply at risk.” Results are sorted by supply at risk descending.
Stress Test
The interactive stress test overrides a target coin's overall score, then recomputes the Dependency Risk dimension for every coin that lists that target as an upstream dependency. This models the direct dependency channel only.
In reality, a major stablecoin failure would also impact peg stability, liquidity, and market confidence simultaneously — the stress test captures only the mechanical dependency impact.
Limitations
- Collateral weights are researched estimates that may not reflect real-time ratios
- The stress test models only the dependency risk channel, not second-order market effects
Version increments when tracked contracts, event parsing rules, cursor semantics, or amount-enrichment logic change.
The Blacklist Tracker monitors issuer intervention events across USDC, USDT, PAXG, and XAUT contracts, including blacklist, unblacklist, and destroy/wipe actions across EVM and Tron networks.
Methodology revisions document changes to event coverage, cross-chain decoding behavior, cursor safety policies, and amount attribution rules that affect historical interpretation and comparability over time.