Mint/Burn Flow Changelog
Full version history of Mint/Burn Flow methodology decisions, from v1.0 to v4.7.
Jump to Version
LatestLatest Version
Closed-day baseline, fixed aggregate 24h semantics, and coverage disclosures
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.
Impact Snapshot
- 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
v4.7Mar 10, 2026Closed-day baseline, fixed aggregate 24h semantics, and coverage disclosures
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
DetailsHide details
Closed-day baseline, fixed aggregate 24h semantics, and coverage disclosures
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
Impact Notes
- 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
- unreleased
v4.6Mar 9, 2026Safe-frontier ingestion and counted event-history alignment
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
DetailsHide details
Safe-frontier ingestion and counted event-history alignment
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
Impact Notes
- 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
- unreleased
v4.5Mar 9, 2026Data quality: noise filtering, auto-heal, and activity gating
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
DetailsHide details
Data quality: noise filtering, auto-heal, and activity gating
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
Impact Notes
- 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
- unreleased
v4.4Mar 7, 2026ReconstructedTwo-signal flow semantics and baseline-aware interpretation
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
DetailsHide details
Two-signal flow semantics and baseline-aware interpretation
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
Impact Notes
- 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
- unreleased
v4.3Mar 4, 2026ReconstructedNR gating for no-activity flow windows
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
DetailsHide details
NR gating for no-activity flow windows
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
Impact Notes
- 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
- unreleased
v4.2Mar 4, 2026ReconstructedSigned zero-baseline flow-intensity semantics
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
DetailsHide details
Signed zero-baseline flow-intensity semantics
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
Impact Notes
- 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
- unreleased
v4.1Mar 4, 2026ReconstructedReliability remediation and controlled backfill recovery
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
DetailsHide details
Reliability remediation and controlled backfill recovery
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
Impact Notes
- 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
- 20f56c3
v4.0Mar 4, 2026ReconstructedreUSD deposit amount scale correction
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
DetailsHide details
reUSD deposit amount scale correction
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
Impact Notes
- 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
- a49abfa
v3.2Mar 3, 2026ReconstructedEvent-time USD valuation for flow amounts
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
DetailsHide details
Event-time USD valuation for flow amounts
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
Impact Notes
- 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
- 89ef4fa
v3.1Mar 3, 2026ReconstructedAlchemy migration and chain-aware scan controls
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)
DetailsHide details
Alchemy migration and chain-aware scan controls
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)
Impact Notes
- 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)
- 32f1e37
- 8193ab3
- 3b66c98
v3.0Mar 2, 2026ReconstructedreUSD multi-chain coverage and per-coin dedup correction
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
DetailsHide details
reUSD multi-chain coverage and per-coin dedup correction
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
Impact Notes
- 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
- 34893a5
- aa2bcb8
v2.1Mar 1, 2026ReconstructedGrade-aware flight-to-quality classification
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
DetailsHide details
Grade-aware flight-to-quality classification
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
Impact Notes
- 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
- dcdefde
- c1c1839
v2.0Mar 1, 2026ReconstructedUSDT treasury-event capture and partial-data gauge support
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
DetailsHide details
USDT treasury-event capture and partial-data gauge support
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
Impact Notes
- 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
- 2144236
- 1eddad0
v1.0Mar 1, 2026ReconstructedInitial Mint/Burn Flow release
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`
DetailsHide details
Initial Mint/Burn Flow release
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`
Impact Notes
- 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`
- 06ad0d9
- e36a0c1
- 2473c86
- fea681c