---
title: "Mint/Burn Flow Changelog"
canonical: "https://pharos.watch/methodology/mint-burn-flow-changelog/"
description: "Mint/Burn Flow Changelog - Pharos methodology version history."
---

# Mint/Burn Flow Changelog

## v6.17 - Tx-context shortfall exclusion recovery

**Effective:** 2026-06-07

Bridge-aware mint/burn ingestion now handles residual transaction-context shortfalls per row, excluding unresolved rows from economic flow while allowing resolved rows and the sync frontier to proceed.

- Rows with unavailable tx or receipt context are persisted as `flow_type='bridge_transfer'`, with unresolved burns marked `review_required` / `tx-context-unavailable`
- Resolved rows in the same bridge-aware config window are no longer withheld because of one unavailable transaction context
- Cron metadata continues to expose `bridgeClassification.txContextShortfalls` and `bridgeClassification.deferredRows` as unavailable-context diagnostics rather than provider-error counts

## v6.16 - Bridge context budget recovery

**Effective:** 2026-06-07

Bridge-aware critical mint/burn configs now resolve transaction and receipt context with one Alchemy batch request per transaction and have a bounded larger critical budget for high-volume configs.

- High-volume bridge-aware configs such as Ethereum USDC can catch up without repeatedly deferring all parsed rows under the old 60-request cap
- Bridge classification still fails closed for counted standard flow when transaction or receipt context is genuinely unavailable; unavailable rows remain excluded from economic-flow aggregates
- The cron-wide request ceiling remains 200, while bridge-aware critical configs may use up to 150 requests so other critical configs retain run headroom

## v6.15 - Bridge tx-context shortfall guard

**Effective:** 2026-06-06

Bridge-aware mint/burn ingestion now treats unresolved transaction context as a classification shortfall instead of publishing bridge candidates as standard flow.

- Rows from bridge-enabled configs are not persisted when tx or receipt context cannot be resolved, keeping unclassified bridge mints out of counted economic flow
- Affected configs remain unsatisfied and do not advance their sync frontier, allowing a later run to retry the same block range once RPC context is available
- Cron metadata exposes `bridgeClassification.txContextShortfalls` and `bridgeClassification.deferredRows` so status diagnostics show classification gaps explicitly

## v6.14 - Bridge config validation fail-closed

**Effective:** 2026-06-06

Bridge-detection config validation now aborts module load on malformed addresses, topics, or selectors instead of logging and continuing with silently disabled bridge filtering.

- Malformed bridge metadata can no longer let CCIP, CCTP, or LayerZero bridge mints/burns leak into standard economic flow counts
- Mint/burn cron metadata now publishes `bridgeValidationErrors: 0` on healthy runs so the validation surface is explicit in status diagnostics
- Checked-in bridge configs are covered by a module-load validation regression test before deployment

## v6.13 - USD-valued largest-event guard

**Effective:** 2026-06-06

The public 24-hour largest-event field now considers only rows with resolved USD valuation, preventing raw token amounts from being rendered as dollars.

- Aggregate `/api/mint-burn-flows` excludes `amount_usd IS NULL` rows from largest-event selection
- The shared largest-event selector ranks by `amount_usd` only and no longer falls back to raw native token amount
- Unpriced mint/burn rows remain available for remediation and event-ledger diagnostics, but they do not populate the USD largest-event table column

## v6.12 - Cadence-based coverage lag classification

**Effective:** 2026-06-06

Per-coin mint/burn coverage now marks established configs as lagging once block progress falls beyond the public freshness cadence, and reports unknown coverage when current chain-head metadata is unavailable.

- Ethereum mint/burn coverage no longer waits roughly 10,000 blocks before surfacing a stuck established config as lagging
- Coins with missing current chain-head metadata no longer continue to report full coverage solely from historical sync state
- The public flows table, coverage matrix, and flow receipt now expose an `unknown` coverage status for configured assets whose current lag cannot be trusted

## v6.11 - yBOLD extended transfer coverage

**Effective:** 2026-05-12

Yearn BOLD (yBOLD) now has extended Ethereum mint/burn tracking through standard ERC-20 zero-address Transfer events.

- Adds yBOLD to the extended mint/burn config registry using the shared Ethereum contract metadata
- Tracks yBOLD share issuance and redemption separately from base BOLD's mint/burn flow so wrapper activity does not disappear into the parent asset
- Keeps bridge detection unchanged because the tracked yBOLD deployment is the single Ethereum vault share token

## v6.1 - USG extended transfer coverage

**Effective:** 2026-05-08

Tangent USD (USG) now has extended Ethereum mint/burn tracking from its reviewed deployment block using standard ERC-20 zero-address Transfer events.

- Adds USG to the extended mint/burn config registry with a reviewed deployment-block start bound
- Captures the initial 40.02M USG zero-address mint history plus future USG supply changes through the standard Transfer decoder
- Keeps bridge and custom-event handling unchanged; no USG bridge classifier is configured because only the Ethereum token contract is currently tracked

## v6.0 - Bridge classifier parity, LayerZero endpoint-only signal, canonical-chain gauge weighting

**Effective:** 2026-04-17

Bridge classification now tags both mint and burn rows for CCIP/CCTP transactions, the LayerZero classifier recognizes endpoint-only fingerprints, and the Bank Run Gauge weights coins by their tracked-chain circulating supply rather than global supply. Atomic-roundtrip detection now requires mint/burn totals to match within 0.5%, and custom-event counterparty extraction supports unindexed address parameters.

- CCIP and CCTP bridge mints now tag as `flow_type='bridge_transfer'` (previously leaked into economic mint flow for USDC, EURC, USDO, USD1, avUSD, ZCHF)
- LayerZero classifier accepts endpoint-emitter signal alone, catching Executor-only mint patterns previously missed on USDai-Arbitrum
- Bank Run Gauge weights each coin's intensity by its circulating supply on tracked-chain scope only (e.g., USDC weighted by Ethereum supply, not global $36B+ total)
- Atomic-roundtrip detection requires sum(mint) and sum(burn) to match within 0.5% — partial same-tx mix is preserved as economic flow rather than erased
- Custom-event counterparty extraction now supports unindexed address parameters (reUSD `Deposited` user address no longer null)
- Historical rows reclassified via `/api/backfill-mint-burn` replay and `/api/reclassify-atomic-roundtrips` after deploy

## v5.2 - GYD retirement from active mint/burn coverage

**Effective:** 2026-04-14

GYD was removed from active mint/burn flow tracking after its cross-chain contract incident left the token functionally dead and moved it to the cemetery dataset.

- Mint/burn flow configs no longer scan the Ethereum GYD token after the asset moved out of the active stablecoin registry
- Public flow coverage counts and stablecoin registry totals now exclude GYD from active surfaces
- Historical rows remain in D1 if previously ingested, but current API scope is driven by the active config registry

## v5.1 - Canonical-chain mint/burn scope for native issuance tracking

**Effective:** 2026-04-08

Mint/burn coverage now follows each asset's configured issuance chain instead of assuming Ethereum-only scope, with USDai switched to native Arbitrum issuance/redemption tracking and stale non-canonical rows excluded from public aggregates.

- USDai mint/burn tracking now runs on Arbitrum as the canonical native issuance chain instead of Ethereum bridge-transfer noise
- Aggregate and per-coin APIs now read only configured `(stablecoinId, chainId)` pairs so stale historical rows on non-canonical chains do not contaminate public flow metrics
- Cron metadata, coverage helpers, status reconciliation, daily digest, and DEWS mint/burn inputs now honor chain-aware mint/burn scope
- Admin backfill auto-selection and explicit config replay now work across the configured issuance-chain set instead of Ethereum-only

## v5.0 - Bridge-transfer flow exclusion for omnichain tokens

**Effective:** 2026-04-08

Bridge-aware classification now excludes bridge-transfer mints as well as burns, starting with USDai's LayerZero OFT path, and replay/backfill runs can repair previously inserted rows.

- LayerZero OFT transfers now mark both the mint-side and burn-side event rows as `flowType='bridge_transfer'` so they drop out of counted economic-flow aggregates
- USDai's Ethereum tracker now recognizes the documented USDai OAdapter / LayerZero packet flow instead of treating equal-sized bridge mints and burns as issuance activity
- Bridge classification now runs after all parsed rows are assembled for the config chunk, so mint-side bridge rows are visible to the classifier
- Replay and backfill persistence now updates `flow_type` on existing rows, allowing post-deploy repair of previously ingested bridge-transfer noise

## v4.9 - Deterministic repair loops and adapter provenance disclosures

**Effective:** 2026-03-24

Mint/burn repair and coverage semantics were tightened through historical-first valuation repair, deterministic cleanup backlogs, aligned FTQ classification, and explicit adapter provenance on public coverage metadata.

- Historical price repair now values events from event-day `supply_history` instead of current `price_cache` snapshots
- NULL-price healing and atomic-roundtrip sweeping now use deterministic ordered backlog queries
- The daily digest now shares the same report-card-cache FTQ classification semantics as `/api/mint-burn-flows`
- Per-coin coverage now exposes `adapterKinds`, `startBlockSource`, and `startBlockConfidence` so blanket start-block defaults are visible in the API

## v4.8 - Ethereum coverage wave for long-tail mint/burn tracking

**Effective:** 2026-03-24

Mint/burn flow coverage expanded materially by restoring and adding long-tail Ethereum ERC-20 configs that can be tracked with the standard zero-address Transfer path.

- Added 40 additional Ethereum transfer-based configs for previously uncovered tracked assets
- Extended flow coverage now includes more long-tail fiat, non-USD, commodity, and yield-bearing assets where shared metadata already exposes an Ethereum contract
- Coverage scope increased from 84 contract configs / 83 stablecoin IDs to 124 contract configs / 123 stablecoin IDs while preserving the existing critical-lane set

## v4.7 - Closed-day baseline, fixed aggregate 24h semantics, and coverage disclosures

**Effective:** 2026-03-10

Pressure Shift now compares live 24-hour flows against trailing fully closed daily baselines, aggregate API 24h fields are fixed regardless of chart window, and the product now exposes Ethereum-only scope plus coverage/freshness metadata.

- Pressure Shift baseline now excludes the current UTC day and uses the last 30 fully closed daily buckets
- Aggregate `/api/mint-burn-flows?hours=N` now keeps coin-level 24h fields fixed to the canonical 24h window while only the hourly series respects `hours`
- Aggregate flow API now exposes `scope`, `sync`, `windowHours`, and per-coin `coverage` metadata
- The `/flows` page now labels the feature as Ethereum-only and visually marks partial-history or lagging coverage states
- Flow freshness headers now follow successful sync timestamps instead of latest event timestamps, avoiding false staleness during quiet periods

## v4.6 - Safe-frontier ingestion and counted event-history alignment

**Effective:** 2026-03-09

Mint/burn ingestion now advances only to a shared safe coverage frontier under partial scans, and product event-history surfaces now default to counted economic-flow rows.

- Partial event-definition coverage no longer advances sync state past uncovered log ranges
- Missing block timestamps now cap advancement at the earliest unresolved block instead of silently skipping rows forever
- The event API now exposes `flowType` and supports `scope=counted` for rows that participate in aggregates
- Detail-page flow history now excludes bridge burns, review-required burns, and atomic roundtrips by default
- Unpriced event rows now render native token amounts instead of false dollar values
- `minAmount` filtering is now strictly USD-only when `amountUsd` is available

## v4.5 - Data quality: noise filtering, auto-heal, and activity gating

**Effective:** 2026-03-09

Improves flow data reliability by excluding flash-loan roundtrips from aggregation, auto-healing missing USD prices, and gating pressure shift for low-activity coins.

- Transactions containing both mint and burn for the same token (flash loans, atomic arb) are now flagged as atomic_roundtrip and excluded from all flow aggregates
- Events synced without USD price are now automatically backfilled within 48h by the sync cron
- Coins with less than $50K absolute 24h flow now return NR instead of a potentially misleading pressure shift score
- New observability counters in cron metadata: atomicRoundtripsDetected, nullPricesHealed

## v4.4 - Two-signal flow semantics and baseline-aware interpretation

**Effective:** 2026-03-07

Per-coin flow UI now separates raw 24h net flow from baseline-relative pressure shift while preserving the underlying formula.

- Per-coin flow UI now separates raw 24h net flow from baseline-relative pressure shift
- API now exposes canonical `pressureShiftScore` and interpretation fields while retaining `flowIntensity` as a deprecated alias
- Frontend printer and shredder visuals now key off actual net flow direction instead of score sign
- Methodology and product copy now distinguish current direction from pressure-versus-baseline context

## v4.3 - NR gating for no-activity flow windows

**Effective:** 2026-03-04

Coins with no mint/burn activity in the active 24h window now publish NR flow intensity and are excluded from gauge weighting.

- Removed synthetic neutral intensity fallback for sparse no-activity windows
- No-activity windows now return `flowIntensity = null` (NR) instead of `0`
- Bank Run Gauge now excludes those NR windows from the market-cap-weighted composite
- Frontend flow-intensity UI now displays NR explicitly for null values

## v4.2 - Signed zero-baseline flow-intensity semantics

**Effective:** 2026-03-04

Flow Intensity Score and Bank Run Gauge moved from midpoint semantics to canonical signed outputs centered at zero baseline.

- Flow Intensity Score now emits signed values via `clamp(-100, 100, z * 50)`
- Gauge score now uses signed -100 to +100 output with neutral baseline at 0
- Band thresholds were remapped around zero while retaining existing band labels
- Frontend midpoint conversion shim was removed; UI now consumes canonical signed API values directly

## v4.1 - Reliability remediation and controlled backfill recovery

**Effective:** 2026-03-04

Ingestion moved to a reliability-first runtime policy with degraded/error health signaling and operator-grade recovery controls.

- Added run-state rotation plus per-chain quotas so coverage remains balanced under budget pressure
- Added degraded/error escalation from sustained low coverage or repeated API failures
- Introduced authenticated chunked backfill endpoint (`/api/backfill-mint-burn`) reusing ingestion parsing and aggregation

Commits: `20f56c3`

## v4.0 - reUSD deposit amount scale correction

**Effective:** 2026-03-04

Fixed a scale mismatch in reUSD mint decoding that overstated deposit-side mint volume.

- reUSD `Deposited` events now decode with 18 decimals instead of 6
- Removed artificial inflation in reUSD mint flow and related aggregates
- Added regression test validating a known on-chain `Deposited` payload decodes to 10 tokens

Commits: `a49abfa`

## v3.2 - Event-time USD valuation for flow amounts

**Effective:** 2026-03-03

Flow USD amounts moved from run-time spot pricing to event-time historical price attribution when available.

- Event valuation now prefers daily historical prices from `supply_history` at event day
- Price provenance persisted per event (`price_used`, `price_timestamp`, `price_source`)
- Row-drop accounting added for malformed/dust logs to improve data quality observability

Commits: `89ef4fa`

## v3.1 - Alchemy migration and chain-aware scan controls

**Effective:** 2026-03-03

Mint/burn ingestion migrated to Alchemy JSON-RPC with chain-specific scan behavior and stronger timestamp resolution guarantees.

- Replaced Etherscan log ingestion with Alchemy `eth_getLogs`
- Block timestamps now resolved in batch via `eth_getBlockByNumber`, with retry-on-missing semantics
- Scan ranges and safety margins calibrated per chain (including Optimism support)

Commits: `32f1e37`, `8193ab3`, `3b66c98`

## v3.0 - reUSD multi-chain coverage and per-coin dedup correction

**Effective:** 2026-03-02

Coverage expanded to Re Protocol reUSD across four chains, then corrected aggregate dedup logic to avoid multi-contract over-weighting.

- Added reUSD mint and redemption event tracking on Ethereum, Arbitrum, Base, and Avalanche
- Added nth-data-slot amount decoding for non-standard event payload layouts
- Aggregate flow loop now deduplicates by stablecoin ID to prevent duplicated rows and weighted overcounts

Commits: `34893a5`, `aa2bcb8`

## v2.1 - Grade-aware flight-to-quality classification

**Effective:** 2026-03-01

Flight-to-quality shifted from static safe-haven lists to report-card score buckets, with fallback only when grade data is stale or missing.

- Safe/risky FTQ buckets now derive from report-card scores (safe >= 65, risky < 50, neutral ignored)
- Static safe-haven sets are now fallback-only for unavailable or stale report-card cache
- Largest-event attribution aligned to requested window semantics in aggregate mode

Commits: `dcdefde`, `c1c1839`

## v2.0 - USDT treasury-event capture and partial-data gauge support

**Effective:** 2026-03-01

Coverage and scoring robustness were upgraded to capture USDT treasury mint/burn events and keep the gauge active during early-history ramp.

- Added `startBlock` per config for near-history initialization instead of scanning from genesis
- USDT now tracks `Issue` and `Redeem` events that do not emit standard `Transfer` mints/burns
- Gauge now computes from available non-null FIS inputs instead of returning null when any coin lacks sufficient history

Commits: `2144236`, `1eddad0`

## v1.0 - Initial Mint/Burn Flow release

**Effective:** 2026-03-01

Launched baseline mint/burn flow tracking, scoring primitives, and public API surfaces for aggregate and per-coin analysis.

- Introduced phase-1 contract coverage for 10 tracked stablecoins
- Shipped FIS formula, seven-band Bank Run Gauge mapping, and flight-to-quality detection thresholds
- Deployed incremental sync cron with `/api/mint-burn-flows` and `/api/mint-burn-events`

Commits: `06ad0d9`, `e36a0c1`, `2473c86`, `fea681c`
