Mint/Burn Flow Changelog
Full version history of Mint/Burn Flow methodology decisions, from v1.0 to v6.191.
What This Controls
Mint/Burn Flow Changelog version history
Use this changelog to trace how Pharos changed the related scoring, data-source, threshold, or interpretation rules over time. The latest card below is the current public contract; older entries are retained so historical charts and citations can be read against the rules active at the time.
Primary References
Latest Version
Base Dollar native flow coverage
Base Dollar joins the extended mint/burn lane on its canonical Base deployment from the verified creation block, with a protocol-scale threshold that retains ordinary borrower issuance while filtering sub-economic interest-distribution churn.
Impact Snapshot
- BD Transfer mints and burns are scanned from Base block 49,406,521, the verified CREATE2 deployment block for the canonical token.
- The 100 BD threshold sits below Base Dollar's 200 BD minimum debt and retains observed 300, 1,000, and 2,700 BD borrower mints that the generic 10,000-unit long-tail threshold would discard.
- Public flow coverage now includes canonical issuance chains on Ethereum, Arbitrum, and Base; scoring formulas, bridge classification, and Bank Run Gauge weighting are unchanged.
v6.191Aug 21, 2026Base Dollar native flow coverage
Base Dollar joins the extended mint/burn lane on its canonical Base deployment from the verified creation block, with a protocol-scale threshold that retains ordinary borrower issuance while filtering sub-economic interest-distribution churn.
- BD Transfer mints and burns are scanned from Base block 49,406,521, the verified CREATE2 deployment block for the canonical token.
- The 100 BD threshold sits below Base Dollar's 200 BD minimum debt and retains observed 300, 1,000, and 2,700 BD borrower mints that the generic 10,000-unit long-tail threshold would discard.
- Public flow coverage now includes canonical issuance chains on Ethereum, Arbitrum, and Base; scoring formulas, bridge classification, and Bank Run Gauge weighting are unchanged.
DetailsHide details
Base Dollar native flow coverage
Base Dollar joins the extended mint/burn lane on its canonical Base deployment from the verified creation block, with a protocol-scale threshold that retains ordinary borrower issuance while filtering sub-economic interest-distribution churn.
- BD Transfer mints and burns are scanned from Base block 49,406,521, the verified CREATE2 deployment block for the canonical token.
- The 100 BD threshold sits below Base Dollar's 200 BD minimum debt and retains observed 300, 1,000, and 2,700 BD borrower mints that the generic 10,000-unit long-tail threshold would discard.
- Public flow coverage now includes canonical issuance chains on Ethereum, Arbitrum, and Base; scoring formulas, bridge classification, and Bank Run Gauge weighting are unchanged.
Impact Notes
- BD Transfer mints and burns are scanned from Base block 49,406,521, the verified CREATE2 deployment block for the canonical token.
- The 100 BD threshold sits below Base Dollar's 200 BD minimum debt and retains observed 300, 1,000, and 2,700 BD borrower mints that the generic 10,000-unit long-tail threshold would discard.
- Public flow coverage now includes canonical issuance chains on Ethereum, Arbitrum, and Base; scoring formulas, bridge classification, and Bank Run Gauge weighting are unchanged.
v6.19Aug 10, 2026Bank Run Gauge: one producer, one universe
The Bank Run Gauge is now computed once, by the /api/mint-burn-flows publication, and the daily digest re-bins that publication instead of recomputing a second composite from mint_burn_hourly over a narrower coin set with global peg-bucket supply weights.
- Previously the same trading day could carry two different gauge scores and bands: the API scored every active tracked mint/burn pair weighted by tracked-chain circulating supply, while the digest restricted to the core-aggregate set on canonical chains weighted by global supply
- Twenty tracked coins the digest silently excluded now contribute, and 92 coins deployed beyond their tracked mint/burn chains are weighted by observed tracked-chain supply rather than their global total; baseline derivation also unifies on observed-day averaging
- The publication carries a per-chain 24-hour net-flow breakdown over the same universe, so the digest's top-chains ranking is no longer derived independently
- Digest gauge values before this change are not comparable to values after it; the 7-day gauge trajectory and weekly recap range show a one-time discontinuity while the pre-cutover archive ages out
DetailsHide details
Bank Run Gauge: one producer, one universe
The Bank Run Gauge is now computed once, by the /api/mint-burn-flows publication, and the daily digest re-bins that publication instead of recomputing a second composite from mint_burn_hourly over a narrower coin set with global peg-bucket supply weights.
- Previously the same trading day could carry two different gauge scores and bands: the API scored every active tracked mint/burn pair weighted by tracked-chain circulating supply, while the digest restricted to the core-aggregate set on canonical chains weighted by global supply
- Twenty tracked coins the digest silently excluded now contribute, and 92 coins deployed beyond their tracked mint/burn chains are weighted by observed tracked-chain supply rather than their global total; baseline derivation also unifies on observed-day averaging
- The publication carries a per-chain 24-hour net-flow breakdown over the same universe, so the digest's top-chains ranking is no longer derived independently
- Digest gauge values before this change are not comparable to values after it; the 7-day gauge trajectory and weekly recap range show a one-time discontinuity while the pre-cutover archive ages out
Impact Notes
- Previously the same trading day could carry two different gauge scores and bands: the API scored every active tracked mint/burn pair weighted by tracked-chain circulating supply, while the digest restricted to the core-aggregate set on canonical chains weighted by global supply
- Twenty tracked coins the digest silently excluded now contribute, and 92 coins deployed beyond their tracked mint/burn chains are weighted by observed tracked-chain supply rather than their global total; baseline derivation also unifies on observed-day averaging
- The publication carries a per-chain 24-hour net-flow breakdown over the same universe, so the digest's top-chains ranking is no longer derived independently
- Digest gauge values before this change are not comparable to values after it; the 7-day gauge trajectory and weekly recap range show a one-time discontinuity while the pre-cutover archive ages out
- Fail-closed: a gauge publication older than 24 hours (or unparseable) is dropped and the digest run marks degraded instead of republishing a wrong gauge; older than 2 hours is used but flagged
v6.18Jul 28, 2026Retention-safe quiet coverage maturity
Mint/burn coverage maturity now uses completed block-scan span when a quiet asset has no retained event row, preventing retention from sending fully observed configs back to bootstrapping.
- A quiet config with no retained hourly event remains full once its sync cursor proves at least 30 days of configured-chain history
- Genuinely young quiet configs still progress from bootstrapping to partial history before reaching full coverage
- XAUT now reports its mature, near-head Ethereum coverage instead of bootstrapping after its last hourly event aged beyond the 95-day aggregate retention window
DetailsHide details
Retention-safe quiet coverage maturity
Mint/burn coverage maturity now uses completed block-scan span when a quiet asset has no retained event row, preventing retention from sending fully observed configs back to bootstrapping.
- A quiet config with no retained hourly event remains full once its sync cursor proves at least 30 days of configured-chain history
- Genuinely young quiet configs still progress from bootstrapping to partial history before reaching full coverage
- XAUT now reports its mature, near-head Ethereum coverage instead of bootstrapping after its last hourly event aged beyond the 95-day aggregate retention window
Impact Notes
- A quiet config with no retained hourly event remains full once its sync cursor proves at least 30 days of configured-chain history
- Genuinely young quiet configs still progress from bootstrapping to partial history before reaching full coverage
- XAUT now reports its mature, near-head Ethereum coverage instead of bootstrapping after its last hourly event aged beyond the 95-day aggregate retention window
v6.17Jun 7, 2026Tx-context shortfall exclusion recovery
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
DetailsHide details
Tx-context shortfall exclusion recovery
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
Impact Notes
- 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.16Jun 7, 2026Bridge context budget recovery
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
DetailsHide details
Bridge context budget recovery
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
Impact Notes
- 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.15Jun 6, 2026Bridge tx-context shortfall guard
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
DetailsHide details
Bridge tx-context shortfall guard
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
Impact Notes
- 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.14Jun 6, 2026Bridge config validation fail-closed
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
DetailsHide details
Bridge config validation fail-closed
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
Impact Notes
- 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.13Jun 6, 2026USD-valued largest-event guard
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
DetailsHide details
USD-valued largest-event guard
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
Impact Notes
- 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.12Jun 6, 2026Cadence-based coverage lag classification
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
DetailsHide details
Cadence-based coverage lag classification
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
Impact Notes
- 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.11May 12, 2026yBOLD extended transfer coverage
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
DetailsHide details
yBOLD extended transfer coverage
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
Impact Notes
- 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.1May 8, 2026USG extended transfer coverage
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
DetailsHide details
USG extended transfer coverage
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
Impact Notes
- 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.0Apr 17, 2026Bridge classifier parity, LayerZero endpoint-only signal, canonical-chain gauge weighting
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
DetailsHide details
Bridge classifier parity, LayerZero endpoint-only signal, canonical-chain gauge weighting
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
Impact Notes
- 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.2Apr 14, 2026GYD retirement from active mint/burn coverage
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
DetailsHide details
GYD retirement from active mint/burn coverage
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
Impact Notes
- 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.1Apr 8, 2026Canonical-chain mint/burn scope for native issuance tracking
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
DetailsHide details
Canonical-chain mint/burn scope for native issuance tracking
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
Impact Notes
- 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.0Apr 8, 2026Bridge-transfer flow exclusion for omnichain tokens
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
DetailsHide details
Bridge-transfer flow exclusion for omnichain tokens
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
Impact Notes
- 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.9Mar 24, 2026Deterministic repair loops and adapter provenance disclosures
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
DetailsHide details
Deterministic repair loops and adapter provenance disclosures
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
Impact Notes
- 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.8Mar 24, 2026Ethereum coverage wave for long-tail mint/burn tracking
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
DetailsHide details
Ethereum coverage wave for long-tail mint/burn tracking
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
Impact Notes
- 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.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
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
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
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
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
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
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