Pricing Pipeline Changelog: v2 archive
Historical release evidence. Return to current versions and the complete history index.
What this controls
Pricing Pipeline Changelog: v2 archive version history
Use this changelog to trace how Pharos changed the related scoring, data-source, threshold, or interpretation rules over time. Entries record the contract active at each release; archived rules are retained so historical charts and citations can be read against the rules active at the time.
Primary references
Latest version
Jupiter V3 freshness fix and exact DexScreener address fallback
Stopped rejecting Jupiter V3 fallback quotes based on optional createdAt metadata and upgraded DexScreener enrichment to prefer exact token-address pool lookups before symbol search.
Impact snapshot
- Jupiter fallback now relies on V3 liquidity gates and peg-aware validation instead of treating optional `createdAt` metadata as a hard freshness cutoff
- Tracked Solana assets can recover through Jupiter even when V3 responses include old createdAt values alongside current block-level pricing
- DexScreener fallback now prefers exact chain+address pool lookups when an asset has a resolvable token address, reducing dependence on noisy symbol search results
- DexScreener search remains as the last fallback path, still capped by the shared request budget and liquidity sanity gates
v2.9Mar 20, 2026Jupiter V3 freshness fix and exact DexScreener address fallback
Stopped rejecting Jupiter V3 fallback quotes based on optional createdAt metadata and upgraded DexScreener enrichment to prefer exact token-address pool lookups before symbol search.
- Jupiter fallback now relies on V3 liquidity gates and peg-aware validation instead of treating optional `createdAt` metadata as a hard freshness cutoff
- Tracked Solana assets can recover through Jupiter even when V3 responses include old createdAt values alongside current block-level pricing
- DexScreener fallback now prefers exact chain+address pool lookups when an asset has a resolvable token address, reducing dependence on noisy symbol search results
- DexScreener search remains as the last fallback path, still capped by the shared request budget and liquidity sanity gates
DetailsHide details
Jupiter V3 freshness fix and exact DexScreener address fallback
Stopped rejecting Jupiter V3 fallback quotes based on optional createdAt metadata and upgraded DexScreener enrichment to prefer exact token-address pool lookups before symbol search.
- Jupiter fallback now relies on V3 liquidity gates and peg-aware validation instead of treating optional `createdAt` metadata as a hard freshness cutoff
- Tracked Solana assets can recover through Jupiter even when V3 responses include old createdAt values alongside current block-level pricing
- DexScreener fallback now prefers exact chain+address pool lookups when an asset has a resolvable token address, reducing dependence on noisy symbol search results
- DexScreener search remains as the last fallback path, still capped by the shared request budget and liquidity sanity gates
Impact notes
- Jupiter fallback now relies on V3 liquidity gates and peg-aware validation instead of treating optional `createdAt` metadata as a hard freshness cutoff
- Tracked Solana assets can recover through Jupiter even when V3 responses include old createdAt values alongside current block-level pricing
- DexScreener fallback now prefers exact chain+address pool lookups when an asset has a resolvable token address, reducing dependence on noisy symbol search results
- DexScreener search remains as the last fallback path, still capped by the shared request budget and liquidity sanity gates
v2.8Mar 20, 2026Tertiary full-set FX fallback for multi-source outages
Added ExchangeRate-API as a tertiary live full-set FX fallback so production can keep publishing dated fiat references when both Frankfurter and the existing secondary mirrors are unavailable.
- Frankfurter remains the preferred ECB-backed business-day source for the core fiat set
- The existing `fawazahmed0/currency-api` mirrors still serve CNH/RUB/UAH/ARS and can backstop the wider fiat set when Frankfurter is unavailable
- When both current FX paths fail, ExchangeRate-API can now publish a daily full-set fiat snapshot instead of forcing an immediate cached-fallback run
- The About page and pricing methodology now disclose ExchangeRate-API as an externally visible FX reference source
DetailsHide details
Tertiary full-set FX fallback for multi-source outages
Added ExchangeRate-API as a tertiary live full-set FX fallback so production can keep publishing dated fiat references when both Frankfurter and the existing secondary mirrors are unavailable.
- Frankfurter remains the preferred ECB-backed business-day source for the core fiat set
- The existing `fawazahmed0/currency-api` mirrors still serve CNH/RUB/UAH/ARS and can backstop the wider fiat set when Frankfurter is unavailable
- When both current FX paths fail, ExchangeRate-API can now publish a daily full-set fiat snapshot instead of forcing an immediate cached-fallback run
- The About page and pricing methodology now disclose ExchangeRate-API as an externally visible FX reference source
Impact notes
- Frankfurter remains the preferred ECB-backed business-day source for the core fiat set
- The existing `fawazahmed0/currency-api` mirrors still serve CNH/RUB/UAH/ARS and can backstop the wider fiat set when Frankfurter is unavailable
- When both current FX paths fail, ExchangeRate-API can now publish a daily full-set fiat snapshot instead of forcing an immediate cached-fallback run
- The About page and pricing methodology now disclose ExchangeRate-API as an externally visible FX reference source
v2.7Mar 20, 2026Secondary FX full-set live fallback for Frankfurter outages
Expanded the existing dated secondary FX mirror path so it can temporarily backstop the wider fiat reference set when Frankfurter is unavailable, preventing repeated cached-only FX runs.
- CNH/RUB/UAH/ARS still use the secondary daily feed as their normal source path
- When Frankfurter fails, the fresher `fawazahmed0/currency-api` mirror can now populate the broader fiat FX set instead of forcing an immediate cached-fallback run
- Per-peg FX metadata preserves calendar-daily cadence and source-date semantics during this live fallback path
- Public health no longer needs to report long consecutive cached-fallback FX runs for a Frankfurter-only outage when the secondary feed is healthy
DetailsHide details
Secondary FX full-set live fallback for Frankfurter outages
Expanded the existing dated secondary FX mirror path so it can temporarily backstop the wider fiat reference set when Frankfurter is unavailable, preventing repeated cached-only FX runs.
- CNH/RUB/UAH/ARS still use the secondary daily feed as their normal source path
- When Frankfurter fails, the fresher `fawazahmed0/currency-api` mirror can now populate the broader fiat FX set instead of forcing an immediate cached-fallback run
- Per-peg FX metadata preserves calendar-daily cadence and source-date semantics during this live fallback path
- Public health no longer needs to report long consecutive cached-fallback FX runs for a Frankfurter-only outage when the secondary feed is healthy
Impact notes
- CNH/RUB/UAH/ARS still use the secondary daily feed as their normal source path
- When Frankfurter fails, the fresher `fawazahmed0/currency-api` mirror can now populate the broader fiat FX set instead of forcing an immediate cached-fallback run
- Per-peg FX metadata preserves calendar-daily cadence and source-date semantics during this live fallback path
- Public health no longer needs to report long consecutive cached-fallback FX runs for a Frankfurter-only outage when the secondary feed is healthy
v2.6Mar 19, 2026Published DEX challenger snapshots and durable FX freshness metadata
Pool challenge and depeg confirmation now read dedicated challenger snapshots built from the full retained DEX pool set, while FX reference freshness is tracked separately from usable cached-fallback freshness.
- Pool challenge no longer depends on dex_liquidity.top_pools_json, so display truncation cannot hide a large challenger pool
- Published challenger snapshots are coverage-gated per stablecoin and fall back safely during migration gaps
- Cached FX fallback runs preserve per-peg source timestamps and source modes instead of refreshing them implicitly
- Health and status now report usable FX freshness, underlying source freshness, and consecutive fallback runs separately
DetailsHide details
Published DEX challenger snapshots and durable FX freshness metadata
Pool challenge and depeg confirmation now read dedicated challenger snapshots built from the full retained DEX pool set, while FX reference freshness is tracked separately from usable cached-fallback freshness.
- Pool challenge no longer depends on dex_liquidity.top_pools_json, so display truncation cannot hide a large challenger pool
- Published challenger snapshots are coverage-gated per stablecoin and fall back safely during migration gaps
- Cached FX fallback runs preserve per-peg source timestamps and source modes instead of refreshing them implicitly
- Health and status now report usable FX freshness, underlying source freshness, and consecutive fallback runs separately
Impact notes
- Pool challenge no longer depends on dex_liquidity.top_pools_json, so display truncation cannot hide a large challenger pool
- Published challenger snapshots are coverage-gated per stablecoin and fall back safely during migration gaps
- Cached FX fallback runs preserve per-peg source timestamps and source modes instead of refreshing them implicitly
- Health and status now report usable FX freshness, underlying source freshness, and consecutive fallback runs separately
- Non-USD and commodity validation consumers now read shared FX state instead of inferring freshness from cache updated_at alone
v2.5Mar 19, 2026Kraken and Bitstamp primary pricing, Jupiter Solana fallback, Chainlink reference overlays
Added Kraken and Bitstamp as additional direct venue voices in primary consensus, introduced a Jupiter Price API fallback pass for unresolved Solana assets, and overlaid curated Chainlink reference feeds onto supported FX and commodity validation rates.
- Kraken joins primary consensus at weight 2 for supported USD pairs
- Bitstamp joins primary consensus at weight 1 as a lower-weight corroborating CEX venue
- Primary CEX fetches remain grouped so the quarter-hour pricing lane does not add new peak connection fan-out
- Missing Solana prices can now resolve through Jupiter before DexScreener, gated by liquidity and peg-aware plausibility checks
DetailsHide details
Kraken and Bitstamp primary pricing, Jupiter Solana fallback, Chainlink reference overlays
Added Kraken and Bitstamp as additional direct venue voices in primary consensus, introduced a Jupiter Price API fallback pass for unresolved Solana assets, and overlaid curated Chainlink reference feeds onto supported FX and commodity validation rates.
- Kraken joins primary consensus at weight 2 for supported USD pairs
- Bitstamp joins primary consensus at weight 1 as a lower-weight corroborating CEX venue
- Primary CEX fetches remain grouped so the quarter-hour pricing lane does not add new peak connection fan-out
- Missing Solana prices can now resolve through Jupiter before DexScreener, gated by liquidity and peg-aware plausibility checks
Impact notes
- Kraken joins primary consensus at weight 2 for supported USD pairs
- Bitstamp joins primary consensus at weight 1 as a lower-weight corroborating CEX venue
- Primary CEX fetches remain grouped so the quarter-hour pricing lane does not add new peak connection fan-out
- Missing Solana prices can now resolve through Jupiter before DexScreener, gated by liquidity and peg-aware plausibility checks
- Curated Chainlink EUR/USD, GBP/USD, JPY/USD, XAU/USD, and XAG/USD feeds can now refresh the FX/reference cache when fresh and aligned
- Status source distribution now reports Kraken, Bitstamp, and Jupiter participation explicitly
v2.4Mar 19, 2026Pairwise consensus hardening, RedStone freshness gate, authoritative override ordering
Hardened primary price selection so agreement requires full pairwise clustering, fixed pegs stay on fixed-peg rules when references are temporarily unavailable, RedStone requires fresh timestamped venue breakdowns, and protocol-redeem overrides remain final after GeckoTerminal probing.
- Transitive source chains can no longer create fake multi-source high confidence
- Equal-size cluster ties now resolve deterministically by weight, spread, peg proximity, then label
- Fixed-peg assets no longer silently fall back into NAV-style 500 bps clustering when peg references are missing
- Stale or aggregate-only RedStone entries are excluded before consensus
DetailsHide details
Pairwise consensus hardening, RedStone freshness gate, authoritative override ordering
Hardened primary price selection so agreement requires full pairwise clustering, fixed pegs stay on fixed-peg rules when references are temporarily unavailable, RedStone requires fresh timestamped venue breakdowns, and protocol-redeem overrides remain final after GeckoTerminal probing.
- Transitive source chains can no longer create fake multi-source high confidence
- Equal-size cluster ties now resolve deterministically by weight, spread, peg proximity, then label
- Fixed-peg assets no longer silently fall back into NAV-style 500 bps clustering when peg references are missing
- Stale or aggregate-only RedStone entries are excluded before consensus
Impact notes
- Transitive source chains can no longer create fake multi-source high confidence
- Equal-size cluster ties now resolve deterministically by weight, spread, peg proximity, then label
- Fixed-peg assets no longer silently fall back into NAV-style 500 bps clustering when peg references are missing
- Stale or aggregate-only RedStone entries are excluded before consensus
- Protocol-backed redemption prices can no longer be overwritten by the GeckoTerminal probe
- Direct-API pools must pass shared TVL sanity gates before they suppress overlapping DeFiLlama pools
v2.3Mar 18, 2026Per-protocol DEX bridge aggregation and top-pool challenge source split
The DEX bridge now persists one aggregated price entry per protocol instead of re-injecting individual top pools as repeated consensus sources. Pool challenge reads large current pools from dex_liquidity.top_pools_json, separating consensus promotion from individual-pool depeg challenge inputs.
- Fluid, Balancer, Raydium, and Orca now contribute at most one promoted consensus source each
- Repeated high-TVL pools from the same protocol can no longer overweight primary consensus by appearing multiple times
- dex_prices.price_sources_json now stores per-protocol aggregates for the pricing bridge
- Pool challenge no longer depends on dex_prices.price_sources_json; it reads current top pools from dex_liquidity instead
DetailsHide details
Per-protocol DEX bridge aggregation and top-pool challenge source split
The DEX bridge now persists one aggregated price entry per protocol instead of re-injecting individual top pools as repeated consensus sources. Pool challenge reads large current pools from dex_liquidity.top_pools_json, separating consensus promotion from individual-pool depeg challenge inputs.
- Fluid, Balancer, Raydium, and Orca now contribute at most one promoted consensus source each
- Repeated high-TVL pools from the same protocol can no longer overweight primary consensus by appearing multiple times
- dex_prices.price_sources_json now stores per-protocol aggregates for the pricing bridge
- Pool challenge no longer depends on dex_prices.price_sources_json; it reads current top pools from dex_liquidity instead
Impact notes
- Fluid, Balancer, Raydium, and Orca now contribute at most one promoted consensus source each
- Repeated high-TVL pools from the same protocol can no longer overweight primary consensus by appearing multiple times
- dex_prices.price_sources_json now stores per-protocol aggregates for the pricing bridge
- Pool challenge no longer depends on dex_prices.price_sources_json; it reads current top pools from dex_liquidity instead
- Non-USD tracked stablecoin pairs use peg-reference-aware conversion when deriving direct-API DEX prices
v2.2Mar 17, 2026Pool confirmation fix, peg-type-aware challenge, source quality gating
Fixed critical depeg detection gap where pool-challenge-driven depegs could never be confirmed. Made pool challenge threshold peg-type-aware. Added Pyth confidence and RedStone venue agreement gating. Downgraded CG+DL-only consensus to single-source.
- Pool-level individual prices added as fourth depeg confirmation source, fixing dUSD-like depegs going undetected
- Pool challenge threshold now peg-type-aware: 300 bps for non-USD (was 500 bps for all)
- Pyth feeds with >200 bps confidence excluded from consensus; 100-200 bps downweighted
- RedStone excluded when internal venue agreement < 50%
DetailsHide details
Pool confirmation fix, peg-type-aware challenge, source quality gating
Fixed critical depeg detection gap where pool-challenge-driven depegs could never be confirmed. Made pool challenge threshold peg-type-aware. Added Pyth confidence and RedStone venue agreement gating. Downgraded CG+DL-only consensus to single-source.
- Pool-level individual prices added as fourth depeg confirmation source, fixing dUSD-like depegs going undetected
- Pool challenge threshold now peg-type-aware: 300 bps for non-USD (was 500 bps for all)
- Pyth feeds with >200 bps confidence excluded from consensus; 100-200 bps downweighted
- RedStone excluded when internal venue agreement < 50%
Impact notes
- Pool-level individual prices added as fourth depeg confirmation source, fixing dUSD-like depegs going undetected
- Pool challenge threshold now peg-type-aware: 300 bps for non-USD (was 500 bps for all)
- Pyth feeds with >200 bps confidence excluded from consensus; 100-200 bps downweighted
- RedStone excluded when internal venue agreement < 50%
- CG+DL-only consensus downgraded from high to single-source (illusory agreement)
- NAV tokens (FPI) now visible in peg-summary API with null deviation
- Full source list preserved in consensus label (no more truncation)
- Protocol override divergence warnings logged when >100 bps from consensus
v2.1Mar 16, 2026Consensus honesty: independent DL list price, GeckoTerminal probe, pool challenge
Replaced the DL coins API (which mirrored CoinGecko data, creating illusory 2-source agreement) with the independent DL stablecoins list price. Added GeckoTerminal pool-level cross-check for single-source CG-only assets. Added pool challenge guard that downgrades confidence and replaces price with TVL-weighted pool average when large DEX pools diverge from soft-only consensus.
- Dropped DL coins API from primary consensus: it returned CG-sourced data, making CG+DL agreement tautological
- Added DefiLlama stablecoins list price (weight 1) as a genuinely independent aggregator voice
- Added GeckoTerminal pool probe (weight 1) for single-source CG-only assets with $10K TVL gate
- Pool challenge guard: downgrades soft-only high confidence to 'low' when any $100K+ TVL DEX pool diverges ≥500 bps
DetailsHide details
Consensus honesty: independent DL list price, GeckoTerminal probe, pool challenge
Replaced the DL coins API (which mirrored CoinGecko data, creating illusory 2-source agreement) with the independent DL stablecoins list price. Added GeckoTerminal pool-level cross-check for single-source CG-only assets. Added pool challenge guard that downgrades confidence and replaces price with TVL-weighted pool average when large DEX pools diverge from soft-only consensus.
- Dropped DL coins API from primary consensus: it returned CG-sourced data, making CG+DL agreement tautological
- Added DefiLlama stablecoins list price (weight 1) as a genuinely independent aggregator voice
- Added GeckoTerminal pool probe (weight 1) for single-source CG-only assets with $10K TVL gate
- Pool challenge guard: downgrades soft-only high confidence to 'low' when any $100K+ TVL DEX pool diverges ≥500 bps
Impact notes
- Dropped DL coins API from primary consensus: it returned CG-sourced data, making CG+DL agreement tautological
- Added DefiLlama stablecoins list price (weight 1) as a genuinely independent aggregator voice
- Added GeckoTerminal pool probe (weight 1) for single-source CG-only assets with $10K TVL gate
- Pool challenge guard: downgrades soft-only high confidence to 'low' when any $100K+ TVL DEX pool diverges ≥500 bps
- Pool challenge price correction: replaces soft consensus price with TVL-weighted mean of all qualifying individual pool prices
- DEWS scoring suppresses degradation bonus for high→single-source transitions to prevent alert spikes
- ~130 assets retain genuine high confidence via CG+DL-list agreement; ~27 gain GT cross-check
v2.0Mar 14, 2026Multi-source consensus with oracle, CEX, and on-chain pricing
Upgraded from 2-source cross-validation (CG+DL) to an 8-source weighted consensus system. Added Pyth, Binance, Coinbase, RedStone oracles, Curve on-chain pricing, and promoted DEX price observations to primary voices. N-source clustering replaces simple comparison.
- 8 independent price sources with per-source circuit breakers and configurable weights
- Consensus algorithm clusters sources within 50 bps, picks highest-weight in largest cluster
- Authoritative protocol-redemption overrides for wrapper assets (cUSD, iUSD, crvUSD)
- 4-pass enrichment pipeline for assets still missing prices after primary consensus
DetailsHide details
Multi-source consensus with oracle, CEX, and on-chain pricing
Upgraded from 2-source cross-validation (CG+DL) to an 8-source weighted consensus system. Added Pyth, Binance, Coinbase, RedStone oracles, Curve on-chain pricing, and promoted DEX price observations to primary voices. N-source clustering replaces simple comparison.
- 8 independent price sources with per-source circuit breakers and configurable weights
- Consensus algorithm clusters sources within 50 bps, picks highest-weight in largest cluster
- Authoritative protocol-redemption overrides for wrapper assets (cUSD, iUSD, crvUSD)
- 4-pass enrichment pipeline for assets still missing prices after primary consensus
Impact notes
- 8 independent price sources with per-source circuit breakers and configurable weights
- Consensus algorithm clusters sources within 50 bps, picks highest-weight in largest cluster
- Authoritative protocol-redemption overrides for wrapper assets (cUSD, iUSD, crvUSD)
- 4-pass enrichment pipeline for assets still missing prices after primary consensus
- Price confidence tagging: high (2+ agree), single-source, low (disagree), fallback
- CoinMarketCap enrichment optimized from per-slug to batch listings endpoint