Skip to main content
Pharos
PHAROSlive stablecoin signals

Blacklist Tracker Changelog

Full version history of Blacklist Tracker methodology decisions, from v1.0 to v3.991.

Latest Version

v3.991May 5, 2026

Public transparency and snapshot semantics

Clarifies public API artifacts, UI provenance, and freeze-ledger snapshot semantics without changing event ingestion. `/api/blacklist` integration examples now use uppercase tracker symbols, frozen totals are labeled as last-known successful snapshots, and Tron missing-balance behavior is documented as provider-missing rather than false zero.

Impact Snapshot

  • OpenAPI/Postman document `/api/blacklist?stablecoin=` as an uppercase blacklist-tracker symbol filter
  • Blacklist UI/CSV surfaces amount source/status plus contract/config/event provenance
  • Public frozen totals are presented as last-known successful freeze-ledger snapshots, with provider failures preserving the previous successful value
  • New freeze-ledger snapshots are described as contract/config scoped, with legacy symbol/chain/address fallback for older rows
v3.991May 5, 2026

Public transparency and snapshot semantics

Clarifies public API artifacts, UI provenance, and freeze-ledger snapshot semantics without changing event ingestion. `/api/blacklist` integration examples now use uppercase tracker symbols, frozen totals are labeled as last-known successful snapshots, and Tron missing-balance behavior is documented as provider-missing rather than false zero.

  • OpenAPI/Postman document `/api/blacklist?stablecoin=` as an uppercase blacklist-tracker symbol filter
  • Blacklist UI/CSV surfaces amount source/status plus contract/config/event provenance
  • Public frozen totals are presented as last-known successful freeze-ledger snapshots, with provider failures preserving the previous successful value
  • New freeze-ledger snapshots are described as contract/config scoped, with legacy symbol/chain/address fallback for older rows
Details

Impact Notes

  • OpenAPI/Postman document `/api/blacklist?stablecoin=` as an uppercase blacklist-tracker symbol filter
  • Blacklist UI/CSV surfaces amount source/status plus contract/config/event provenance
  • Public frozen totals are presented as last-known successful freeze-ledger snapshots, with provider failures preserving the previous successful value
  • New freeze-ledger snapshots are described as contract/config scoped, with legacy symbol/chain/address fallback for older rows
  • Tron missing account/token-balance data remains null/provider-missing instead of being converted to zero
0 commits
    v3.99Apr 21, 2026

    Same-run Tron ledger reconciliation

    Reapplies the Tron freeze-ledger mirror after current-balance cache writes so newly ingested Tron blacklist rows resolve in the same `sync-blacklist` cycle, and aligns admin recovery guidance away from destructive sync resets for generic amount-gap warnings.

    • Fresh Tron blacklist/unblacklist rows no longer wait for the next 6-hour cron cycle before `current_balance_snapshot` amounts appear on matching event rows
    • The admin current-balance backfill action now re-applies the Tron ledger mirror after rebuilding `blacklist_current_balances`
    • Blacklist-gap recommendations now prioritize balance backfill, sync-state inspection, and targeted remediation ahead of `reset-blacklist-sync`
    Details

    Impact Notes

    • Fresh Tron blacklist/unblacklist rows no longer wait for the next 6-hour cron cycle before `current_balance_snapshot` amounts appear on matching event rows
    • The admin current-balance backfill action now re-applies the Tron ledger mirror after rebuilding `blacklist_current_balances`
    • Blacklist-gap recommendations now prioritize balance backfill, sync-state inspection, and targeted remediation ahead of `reset-blacklist-sync`
    0 commits
      v3.98Apr 20, 2026

      USDA destroy-event correction

      Narrows Avalon USDa event tracking to the two events its verified contract actually emits: AddedBlackList(address) and RemovedBlackList(address). USDa remains directly freezable and role-burnable, but it no longer subscribes to Tether's DestroyedBlackFunds(address,uint256) topic because the verified USDa ABI/source does not expose that event.

      • USDA blacklist/unblacklist event ingestion remains unchanged
      • USDA no longer advertises or scans a non-existent DestroyedBlackFunds event in CONTRACT_CONFIGS
      • The report-card and blacklistability metadata still mark USDA as directly freezable because isBlackListed gates transfers and manager-controlled add/remove blacklist functions exist
      • Role-gated burn(address,uint256) is documented as a privileged destroy capability, but not mapped to blacklist-tracker destroy rows without a dedicated destroy event
      Details

      Impact Notes

      • USDA blacklist/unblacklist event ingestion remains unchanged
      • USDA no longer advertises or scans a non-existent DestroyedBlackFunds event in CONTRACT_CONFIGS
      • The report-card and blacklistability metadata still mark USDA as directly freezable because isBlackListed gates transfers and manager-controlled add/remove blacklist functions exist
      • Role-gated burn(address,uint256) is documented as a privileged destroy capability, but not mapped to blacklist-tracker destroy rows without a dedicated destroy event
      0 commits
        v3.97Apr 19, 2026

        Status amount-gap tolerance

        Keeps isolated recent blacklist amount gaps below the incident threshold so a single unresolved provider/parser miss among thousands of events remains visible in diagnostics without degrading `/status` or `/admin` health.

        • Recent amount gaps now need at least 5 rows in the 24-hour monitoring window before data quality degrades
        • The stale threshold remains unchanged at 25 recent gaps or a 2% missing-amount ratio
        • The ratio-based degraded threshold remains 1%, so broad amount-attribution failures still surface promptly
        Details

        Impact Notes

        • Recent amount gaps now need at least 5 rows in the 24-hour monitoring window before data quality degrades
        • The stale threshold remains unchanged at 25 recent gaps or a 2% missing-amount ratio
        • The ratio-based degraded threshold remains 1%, so broad amount-attribution failures still surface promptly
        0 commits
          v3.96Apr 18, 2026

          Gentle amount-gap recovery acceleration

          Unblocks the EVM amount recovery lane by excluding Tron rows that are owned by the separate Tron ledger mirror, and raises the per-run recovery cap from 50 to 100 rows while staying inside the 6-hour sync cadence, D1 batch helper, rate limiters, and 900-subrequest run budget.

          • EVM historical amount gaps no longer wait behind recent Tron pending rows in the per-row recovery selection
          • Amount recovery now processes up to 100 rows per 6-hour sync-blacklist run instead of 50
          • The acceleration remains bounded by the existing 7-minute sync runtime budget, 900-subrequest cap, and shared D1 batch chunking
          Details

          Impact Notes

          • EVM historical amount gaps no longer wait behind recent Tron pending rows in the per-row recovery selection
          • Amount recovery now processes up to 100 rows per 6-hour sync-blacklist run instead of 50
          • The acceleration remains bounded by the existing 7-minute sync runtime budget, 900-subrequest cap, and shared D1 batch chunking
          0 commits
            v3.95Apr 17, 2026

            Tier-1 coverage expansion

            Adds eleven new tracked stablecoins across four new event families and six existing families. TUSD joins through a new TRUEUSD_EVENT_FAMILY that discriminates blacklist vs unblacklist via the bool at data slot 0 through the new BlacklistEventDef.eventTypeFromDataBoolIndex extension. JPYC adds CENTRE_BLOCKLISTED_FAMILY (Blocklisted/UnBlocklisted), FRXUSD adds FRAX_FREEZE_FAMILY (AccountFrozen/AccountThawed with non-indexed address), EURCV adds SOCGEN_FREEZE_FAMILY (batch AddressesFrozen/AddressesUnFrozen), NUSD adds NEUTRL_DENYLIST_FAMILY, and FIDD adds FIDELITY_RESTRICTION_FAMILY (TransferRestrictionImposed/Removed). USDA joins through legacy AddedBlackList/RemovedBlackList signatures, while USAT, AEUR, XUSD, and XAUM reuse existing families. Several BSC/Avalanche/Base deployments remain deferred pending block-explorer API access, and apxUSD is intentionally deferred because the verified ABI exposes no direction discriminator.

            • Added TUSD on Ethereum (TRUEUSD_EVENT_FAMILY with bool-discriminator Blacklisted(address,bool) + DestroyedBlackFunds)
            • Added NUSD on Ethereum (NEUTRL_DENYLIST_FAMILY: AddedToDenylist / RemovedFromDenylist)
            • Added EURCV on Ethereum (SOCGEN_FREEZE_FAMILY: batch AddressesFrozen(address[]) / AddressesUnFrozen(address[]))
            • Added USDA on Ethereum using legacy AddedBlackList / RemovedBlackList signatures; USAT on Ethereum reusing USDT0 family; AEUR on Ethereum reusing DUAL_INDEX_FREEZE family
            Details

            Impact Notes

            • Added TUSD on Ethereum (TRUEUSD_EVENT_FAMILY with bool-discriminator Blacklisted(address,bool) + DestroyedBlackFunds)
            • Added NUSD on Ethereum (NEUTRL_DENYLIST_FAMILY: AddedToDenylist / RemovedFromDenylist)
            • Added EURCV on Ethereum (SOCGEN_FREEZE_FAMILY: batch AddressesFrozen(address[]) / AddressesUnFrozen(address[]))
            • Added USDA on Ethereum using legacy AddedBlackList / RemovedBlackList signatures; USAT on Ethereum reusing USDT0 family; AEUR on Ethereum reusing DUAL_INDEX_FREEZE family
            • Added XUSD on Ethereum + BSC reusing the Circle USDC blacklist family; XAUm on Ethereum + BSC reusing the USDT0 family
            • Added JPYC on Ethereum + Polygon (CENTRE_BLOCKLISTED_FAMILY: Blocklisted / UnBlocklisted)
            • Added FRXUSD on Ethereum (FRAX_FREEZE_FAMILY: AccountFrozen / AccountThawed with addressDataIndex=0)
            • Added FIDD on Ethereum (FIDELITY_RESTRICTION_FAMILY: TransferRestrictionImposed / TransferRestrictionRemoved)
            • BSC / Avalanche / Base deployments for TUSD, USDA, AEUR, JPYC, AID, TGBP deferred pending Etherscan v2 free-tier contract-creation coverage for those chains
            • apxUSD deferred: verified ABI emits a single event without a direction discriminator
            0 commits
              v3.94Apr 17, 2026

              Correctness + efficiency + minor coverage gaps

              Worker correctness fixes (Gnosis dRPC 9k-block scan cap, dual-index-freeze family split from WLFI destroy events, TronGrid failure propagation to the circuit breaker, EURC mirror-zero rows locked to permanently_unavailable, address[] expansion capped, Tron maxBlock cursor init), five D1 migrations (derived-row reset, sync_state dedup, EURC mirror-zero stamp, blacklist_events index adjustments, amount-status backfill), summary endpoint rewritten to aggregate in SQL with post-fetch counters inlined, frontend polish (data-driven stats strip, amount-status badge, per-coin stat border, CSV column split, page-clamp + filter-reset coverage), and minor chain-coverage additions (Polygon USDQ, Arbitrum AID, Polygon TGBP; Base AID plus Base/BSC TGBP remain deferred).

              • Gnosis BRZ scans now stay within the dRPC free-tier 10k-block cap and drain the ~12.5M-block backlog that previously masked 2 missed events
              • FDUSD / EURI / AEUR configs use DUAL_INDEX_FREEZE_EVENT_FAMILY without inheriting WLFI FrozenAccountDrained / FrozenFundsReallocated topics they cannot emit
              • TronGrid outages now throw through the per-config circuit breaker instead of silently returning empty arrays
              • EURC rows flagged as circle_mirror_zero_balance are stamped amount_status='permanently_unavailable' and no longer re-enter the recoverable-pending backfill pool
              Details

              Impact Notes

              • Gnosis BRZ scans now stay within the dRPC free-tier 10k-block cap and drain the ~12.5M-block backlog that previously masked 2 missed events
              • FDUSD / EURI / AEUR configs use DUAL_INDEX_FREEZE_EVENT_FAMILY without inheriting WLFI FrozenAccountDrained / FrozenFundsReallocated topics they cannot emit
              • TronGrid outages now throw through the per-config circuit breaker instead of silently returning empty arrays
              • EURC rows flagged as circle_mirror_zero_balance are stamped amount_status='permanently_unavailable' and no longer re-enter the recoverable-pending backfill pool
              • Batch address[] events (USDtb, AID, EURCV) apply a per-log row cap so a single malformed payload cannot blow out the write batch
              • Tron sync cursor initialises from max(block_number) for legacy configs that were left at 0
              • Five D1 migrations applied: 0100 dedup mixed-case blacklist_sync_state keys, 0101 reset legacy derived amount rows, 0102 Gnosis BRZ cursor reseed, 0103 backfill + API composite indexes, 0104 stamp EURC mirror-zero rows as permanently_unavailable
              • /api/blacklist-summary aggregates quarterly chart points and per-coin counts in SQL, dropping summary-endpoint memory from ~5-10MB to a few KB per cache miss
              • Frontend: data-driven stats strip + amount-status badge, per-coin stat border rendered via inline style, CSV splits native / unit / USD / status columns, page-clamp + zero-total + filter-reset covered by tests
              • Three new chain-coverage rows for existing coins: Polygon USDQ, Arbitrum AID, and Polygon TGBP; Base AID plus Base/BSC TGBP remain deferred
              0 commits
                v3.93Apr 16, 2026

                Backlog-safe scanner guardrails

                Keeps EVM sync cursors pinned when the subrequest budget is exhausted before every configured event topic is scanned, marks budget-exhausted runs as degraded, and lowers the duplicate-row check chunk below D1's practical SQL-variable ceiling.

                • Partial multi-topic EVM scans no longer advance cursors past unscanned topics
                • Runs that skip configs after exhausting the subrequest budget now surface as degraded instead of ok
                • Duplicate-row checks use smaller D1-safe chunks for high-row event batches
                Details

                Impact Notes

                • Partial multi-topic EVM scans no longer advance cursors past unscanned topics
                • Runs that skip configs after exhausting the subrequest budget now surface as degraded instead of ok
                • Duplicate-row checks use smaller D1-safe chunks for high-row event batches
                0 commits
                  v3.92Apr 16, 2026

                  Amount attribution: Tron ledger mirror + derived-zero recovery

                  Introduces current_balance_snapshot amount source for Tron freeze-ledger mirroring, widens backfill to include legacy derived-zero EVM rows, and adds provenance badge for snapshot-sourced amounts.

                  • Tron USDT blacklist/unblacklist rows receive amounts from the freeze-ledger snapshot (~6,921 rows)
                  • Legacy derived-zero EVM rows re-enter the backfill pool (~4,381 rows)
                  • Snapshot badge renders on amounts sourced from current_balance_snapshot
                  Details

                  Impact Notes

                  • Tron USDT blacklist/unblacklist rows receive amounts from the freeze-ledger snapshot (~6,921 rows)
                  • Legacy derived-zero EVM rows re-enter the backfill pool (~4,381 rows)
                  • Snapshot badge renders on amounts sourced from current_balance_snapshot
                  0 commits
                    v3.91Apr 16, 2026

                    Coverage quality + USDP addition

                    Extends wlfi-freeze family with FrozenAccountDrained/FrozenFundsReallocated destroy events (USD1/U/FDUSD/EURI), adds USDP Paxos coverage on Ethereum, and corrects Arbitrum FDUSD/AUSD/BUIDL startBlocks.

                    • Added FrozenAccountDrained + FrozenFundsReallocated destroy tracking for USD1/U/FDUSD/EURI
                    • Added USDP (Pax Dollar) Ethereum coverage via Paxos freeze family (65 existing events)
                    • Corrected Arbitrum startBlocks for FDUSD/AUSD/BUIDL to actual deployment blocks
                    Details

                    Impact Notes

                    • Added FrozenAccountDrained + FrozenFundsReallocated destroy tracking for USD1/U/FDUSD/EURI
                    • Added USDP (Pax Dollar) Ethereum coverage via Paxos freeze family (65 existing events)
                    • Corrected Arbitrum startBlocks for FDUSD/AUSD/BUIDL to actual deployment blocks
                    0 commits
                      v3.9Apr 15, 2026

                      Direct EVM coverage wave

                      Adds direct EVM blacklist/freeze coverage for FDUSD, BRZ, AUSD, MNEE, EURI, USDQ, USDO, USDX, AID, TGBP, and EURC, plus BUIDL seize-only tracking. Introduces indexed amount-topic parsing, explicit data-slot extraction for omnibus seize events, EURC mirror-zero suppression, and expanded non-USD valuation.

                      • Added FDUSD Ethereum/BSC/Arbitrum dual-index Freeze/Unfreeze tracking
                      • Added BRZ Ethereum/Gnosis, AUSD Arbitrum/Base, EURI Ethereum/BSC, USDQ Ethereum, USDO Ethereum/Base, USDX Ethereum, AID Ethereum, TGBP Ethereum/Avalanche, and EURC Ethereum/Base/Avalanche event coverage
                      • Added MNEE Ethereum freeze/unfreeze plus confiscation/burn tracking with indexed amount extraction
                      • Extended price-cache USD conversion to EURC, BRZ, EURI, and TGBP
                      Details

                      Impact Notes

                      • Added FDUSD Ethereum/BSC/Arbitrum dual-index Freeze/Unfreeze tracking
                      • Added BRZ Ethereum/Gnosis, AUSD Arbitrum/Base, EURI Ethereum/BSC, USDQ Ethereum, USDO Ethereum/Base, USDX Ethereum, AID Ethereum, TGBP Ethereum/Avalanche, and EURC Ethereum/Base/Avalanche event coverage
                      • Added MNEE Ethereum freeze/unfreeze plus confiscation/burn tracking with indexed amount extraction
                      • Extended price-cache USD conversion to EURC, BRZ, EURI, and TGBP
                      • Added suppression metadata so Circle mirror-zero EURC rows stay auditable without entering public aggregates
                      • Added BUIDL Securitize Seize/OmnibusSeize tracking as destroy/seized-value events
                      0 commits
                        v3.8Apr 15, 2026

                        First-wave CeFi coverage expansion

                        Expands blacklist/freeze tracking to first-wave centralized issuers with verified event surfaces: USDG, RLUSD, U, USDtb, and A7A5. Adds batch address-array parsing and non-USD A7A5 price-cache valuation while keeping clawback, allowlist/KYC, and non-EVM surfaces out of this release.

                        • Added USDG Ethereum FreezeAddress/UnfreezeAddress/FrozenAddressWiped coverage using the Paxos pattern
                        • Added RLUSD Ethereum AccountPaused/AccountUnpaused coverage; clawback remains out of scope until transaction-input classification exists
                        • Added U Ethereum and BSC Freeze/Unfreeze coverage using the dual-indexed address pattern
                        • Added USDtb Ethereum AccountsBlocked/AccountsUnblocked coverage with one row per address in batch events
                        Details

                        Impact Notes

                        • Added USDG Ethereum FreezeAddress/UnfreezeAddress/FrozenAddressWiped coverage using the Paxos pattern
                        • Added RLUSD Ethereum AccountPaused/AccountUnpaused coverage; clawback remains out of scope until transaction-input classification exists
                        • Added U Ethereum and BSC Freeze/Unfreeze coverage using the dual-indexed address pattern
                        • Added USDtb Ethereum AccountsBlocked/AccountsUnblocked coverage with one row per address in batch events
                        • Added A7A5 Ethereum Blacklisted/DeBlacklisted/DestroyedBlackFunds coverage with price-cache USD conversion for the RUB-pegged token
                        0 commits
                          v3.7Apr 8, 2026

                          Balance recovery accuracy and provider resilience

                          Remediates 16 audit findings across the balance recovery pipeline, freeze-ledger cache, and aggregation layer. Eliminates silent wrong-data paths, adds Ethereum mainnet dRPC/chain-RPC fallback, and fixes gold stablecoin USD conversion in all enrichment paths.

                          • Invalid block tags now return null instead of silently querying latest balance (Critical)
                          • Ethereum mainnet historical balance lookups now fall through dRPC and chain-RPC before Etherscan (Critical)
                          • Tron REST API returns null for missing token entries instead of false zero (Major)
                          • PAXG/XAUT events now receive USD conversion in enrichment and backfill paths (Major)
                          Details

                          Impact Notes

                          • Invalid block tags now return null instead of silently querying latest balance (Critical)
                          • Ethereum mainnet historical balance lookups now fall through dRPC and chain-RPC before Etherscan (Critical)
                          • Tron REST API returns null for missing token entries instead of false zero (Major)
                          • PAXG/XAUT events now receive USD conversion in enrichment and backfill paths (Major)
                          • Zero-balance override restricted to gold stablecoins only, preventing false non-zero cache entries (Major)
                          • XAUT now uses its own price entry instead of PAXG price (Major)
                          • Destroyed records excluded from activeFrozenTotal (Major)
                          • New Tron blacklist/unblacklist events immediately marked permanently_unavailable (Major)
                          0 commits
                            v3.6Mar 27, 2026

                            Freeze-ledger quarter attribution for the public chart

                            The public blacklist chart now buckets the persistent freeze ledger by blacklist quarter instead of summing raw event-time blacklist rows, so the quarterly bars explain the same tracked frozen total shown in the summary cards.

                            • The `/api/blacklist-summary` chart now draws from `blacklist_current_balances` rather than raw `blacklist_events` intake amounts
                            • Each tracked balance is attributed to the latest recorded blacklist event for the same stablecoin/chain/address identity so re-blacklisted rows follow the active freeze cycle represented in the ledger
                            • Rows without a local blacklist timestamp fall back to the latest related event timestamp, then snapshot observation time, so tracked ledger value is not silently dropped from the chart
                            Details

                            Impact Notes

                            • The `/api/blacklist-summary` chart now draws from `blacklist_current_balances` rather than raw `blacklist_events` intake amounts
                            • Each tracked balance is attributed to the latest recorded blacklist event for the same stablecoin/chain/address identity so re-blacklisted rows follow the active freeze cycle represented in the ledger
                            • Rows without a local blacklist timestamp fall back to the latest related event timestamp, then snapshot observation time, so tracked ledger value is not silently dropped from the chart
                            0 commits
                              v3.5Mar 27, 2026

                              Persistent freeze-ledger snapshots and bootstrap reconciliation

                              The public frozen-total summary now uses a persistent freeze ledger instead of treating snapshot balances as a live current-state cache. Historical ETH/USDC, ETH/USDT, and TRON/USDT freeze rows were reconciled from the kyc.rip / stables.rip bootstrap so seized-and-burned balances remain visible after later unblacklist or destroy actions.

                              • Added tracked freeze-ledger metrics (`trackedAddressCount`, `trackedFrozenTotal`, `trackedAmountGapCount`) to blacklist summary responses
                              • Snapshot rows are now preserved across later unblacklist events instead of being deleted as if they were only live current balances
                              • Destroy events now persist their seized amount into the freeze ledger so burned balances remain counted
                              • Historical freeze-ledger bootstrap was reconciled against the external kyc.rip / stables.rip dataset for ETH USDC, ETH USDT, and TRON USDT
                              Details

                              Impact Notes

                              • Added tracked freeze-ledger metrics (`trackedAddressCount`, `trackedFrozenTotal`, `trackedAmountGapCount`) to blacklist summary responses
                              • Snapshot rows are now preserved across later unblacklist events instead of being deleted as if they were only live current balances
                              • Destroy events now persist their seized amount into the freeze ledger so burned balances remain counted
                              • Historical freeze-ledger bootstrap was reconciled against the external kyc.rip / stables.rip dataset for ETH USDC, ETH USDT, and TRON USDT
                              0 commits
                                v3.4Mar 27, 2026

                                Active frozen-total ledger and Tron current-balance separation

                                Blacklist summary now distinguishes event-time amounts from active frozen balances, adds a dedicated current-balance cache for active blacklist records, and stops treating legacy Tron derived event amounts as authoritative history.

                                • Added `blacklist_current_balances` for current active blacklist balance snapshots
                                • Blacklist summary gained active-record metrics (`activeAddressCount`, `activeFrozenTotal`, `activeAmountGapCount`)
                                • Active Tron totals now prefer current TRC20 balances for active blacklist rows and destroy-event amounts when funds were seized and burned
                                • Legacy Tron `derived` blacklist/unblacklist event amounts are reset instead of being reused as event-time history
                                Details

                                Impact Notes

                                • Added `blacklist_current_balances` for current active blacklist balance snapshots
                                • Blacklist summary gained active-record metrics (`activeAddressCount`, `activeFrozenTotal`, `activeAmountGapCount`)
                                • Active Tron totals now prefer current TRC20 balances for active blacklist rows and destroy-event amounts when funds were seized and burned
                                • Legacy Tron `derived` blacklist/unblacklist event amounts are reset instead of being reused as event-time history
                                0 commits
                                  v3.3Mar 24, 2026

                                  pyUSD and USD1 blacklist tracking coverage

                                  Extended blacklist tracker to cover pyUSD (PayPal/Paxos) on Ethereum and Arbitrum, and USD1 (World Liberty Financial) on Ethereum, BSC, and Tron. Introduced configurable address topic index for two-indexed-address events.

                                  • Added pyUSD FreezeAddress/UnfreezeAddress/FrozenAddressWiped event tracking (Paxos PaxosTokenV2 pattern)
                                  • Added USD1 Freeze/Unfreeze event tracking with addressTopicIndex=2 for dual-indexed events
                                  • EVM parser now supports configurable topic index for affected address extraction
                                  • Tron parser extended with tronResultKey for non-standard event parameter names
                                  Details

                                  Impact Notes

                                  • Added pyUSD FreezeAddress/UnfreezeAddress/FrozenAddressWiped event tracking (Paxos PaxosTokenV2 pattern)
                                  • Added USD1 Freeze/Unfreeze event tracking with addressTopicIndex=2 for dual-indexed events
                                  • EVM parser now supports configurable topic index for affected address extraction
                                  • Tron parser extended with tronResultKey for non-standard event parameter names
                                  • Aggregation layer (chart, summary stats) made dynamic to accommodate new stablecoins
                                  0 commits
                                    v3.2Mar 24, 2026

                                    Provenance-aware rows and explicit amount semantics

                                    Blacklist rows now persist emitting-contract provenance and explicit native/USD amount status fields so reprocessing and public consumers no longer rely on implicit inference.

                                    • Rows now store config/contract provenance plus event signature metadata
                                    • Amount semantics split into token-native and USD-at-event fields with explicit source/status flags
                                    • Gap monitoring now tracks recoverable attribution failures rather than nullable amounts alone
                                    Details

                                    Impact Notes

                                    • Rows now store config/contract provenance plus event signature metadata
                                    • Amount semantics split into token-native and USD-at-event fields with explicit source/status flags
                                    • Gap monitoring now tracks recoverable attribution failures rather than nullable amounts alone
                                    0 commits
                                      v3.1Feb 25, 2026Reconstructed

                                      API-error-aware sync cursor protection

                                      EVM scanning now distinguishes API failure from genuine no-event ranges so cursors do not advance on unreliable reads.

                                      • EVM log fetching differentiates API failures (`null`) from valid empty responses (`[]`)
                                      • On API failure, sync state is held and retried on the next cycle instead of advancing
                                      • Metadata now reports `apiErrors` for operational observability
                                      Details

                                      Impact Notes

                                      • EVM log fetching differentiates API failures (`null`) from valid empty responses (`[]`)
                                      • On API failure, sync state is held and retried on the next cycle instead of advancing
                                      • Metadata now reports `apiErrors` for operational observability
                                      Reconstructed from git commit history.1 commit
                                      • d40060a
                                      v3.0Feb 25, 2026Reconstructed

                                      Indexer-lag safety margins for cursor advancement

                                      Head advancement added explicit safety buffers to prevent permanently skipping late-indexed explorer events.

                                      • EVM no-event advancement now uses `head - safetyMargin` instead of raw head
                                      • Tron no-event advancement now uses `now - 15m` instead of wall-clock `now`
                                      • Reduces permanent event loss when explorer indexing lags chain tip
                                      Details

                                      Impact Notes

                                      • EVM no-event advancement now uses `head - safetyMargin` instead of raw head
                                      • Tron no-event advancement now uses `now - 15m` instead of wall-clock `now`
                                      • Reduces permanent event loss when explorer indexing lags chain tip
                                      Reconstructed from git commit history.1 commit
                                      • e6de7eb
                                      v2.2Feb 18, 2026Reconstructed

                                      Precision and integrity hardening

                                      Amount math and log parsing were hardened to reduce silent corruption and improve sync telemetry.

                                      • Token amounts switched to BigInt-safe decimal conversion to avoid large-value precision loss
                                      • Malformed EVM logs (invalid block/timestamp) are discarded instead of being inserted
                                      • Sync now emits structured run metadata (`itemCount`, `contractsSkipped`, budget usage)
                                      Details

                                      Impact Notes

                                      • Token amounts switched to BigInt-safe decimal conversion to avoid large-value precision loss
                                      • Malformed EVM logs (invalid block/timestamp) are discarded instead of being inserted
                                      • Sync now emits structured run metadata (`itemCount`, `contractsSkipped`, budget usage)
                                      Reconstructed from git commit history.3 commits
                                      • c6c1391
                                      • 7bc5361
                                      • e950f76
                                      v2.1Feb 18, 2026Reconstructed

                                      Pre-block balance sampling and zero-amount recovery

                                      Balance attribution moved to pre-event block semantics, and backfill began explicitly reprocessing suspicious zero blacklist amounts.

                                      • Balance enrichment samples `blockNumber - 1` for blacklist, unblacklist, and destroy
                                      • Backfill now re-attempts rows with `amount = 0` for blacklist events
                                      • Reduces same-block ordering artifacts that previously produced false zeros
                                      Details

                                      Impact Notes

                                      • Balance enrichment samples `blockNumber - 1` for blacklist, unblacklist, and destroy
                                      • Backfill now re-attempts rows with `amount = 0` for blacklist events
                                      • Reduces same-block ordering artifacts that previously produced false zeros
                                      Reconstructed from git commit history.1 commit
                                      • d7e0ad4
                                      v2.0Feb 12, 2026Reconstructed

                                      L2 balance reliability and budgeted full-scan loop

                                      Major tracking architecture shift for L2 correctness and deterministic scan coverage under strict subrequest budgets.

                                      • Introduced shared per-run subrequest budgeting with least-synced-first config ordering
                                      • L2 balance sourcing evolved from Etherscan-only to RPC/dRPC archive-aware historical balance fetches
                                      • Backfill moved ahead of incremental scan and EVM head caching reduced redundant rescans
                                      Details

                                      Impact Notes

                                      • Introduced shared per-run subrequest budgeting with least-synced-first config ordering
                                      • L2 balance sourcing evolved from Etherscan-only to RPC/dRPC archive-aware historical balance fetches
                                      • Backfill moved ahead of incremental scan and EVM head caching reduced redundant rescans
                                      Reconstructed from git commit history.6 commits
                                      • 58c4f05
                                      • 77dad70
                                      • 28a7ead
                                      • add68dc
                                      • fb7e7d6
                                      • 7d9e677
                                      v1.2Feb 11, 2026Reconstructed

                                      Coverage expansion: USDT0 and gold contract families

                                      Expanded event coverage beyond legacy USDT/USDC patterns and fixed multiple cross-chain parsing mismatches.

                                      • Added USDT0 event signatures and indexed-address parsing for upgraded Tether contracts
                                      • Added PAXG and XAUT contract/event support with contract-specific mappings
                                      • Per-contract decimals and Tron `0x -> 41` address normalization improved amount fidelity
                                      Details

                                      Impact Notes

                                      • Added USDT0 event signatures and indexed-address parsing for upgraded Tether contracts
                                      • Added PAXG and XAUT contract/event support with contract-specific mappings
                                      • Per-contract decimals and Tron `0x -> 41` address normalization improved amount fidelity
                                      Reconstructed from git commit history.5 commits
                                      • b257569
                                      • 9281531
                                      • eeb92e9
                                      • 2fd5065
                                      • 29a4759
                                      v1.1Feb 11, 2026Reconstructed

                                      Ingestion-time enrichment and backfill foundation

                                      Blacklist rows began storing balance context during ingestion, with a companion path for retroactive recovery of missing amounts.

                                      • Blacklist/unblacklist rows are enriched with token balances before insert
                                      • Backfill pipeline introduced for historical rows missing amount values
                                      • Set groundwork for later destroy-event amount recovery hardening
                                      Details

                                      Impact Notes

                                      • Blacklist/unblacklist rows are enriched with token balances before insert
                                      • Backfill pipeline introduced for historical rows missing amount values
                                      • Set groundwork for later destroy-event amount recovery hardening
                                      Reconstructed from git commit history.1 commit
                                      • 1dec7aa
                                      v1.0Feb 9, 2026Reconstructed

                                      Initial Blacklist Tracker release

                                      Launched multi-chain blacklist event ingestion, persistence schema, public API, and dashboard surface.

                                      • Initial incremental EVM + Tron event sync for major fiat-backed stablecoins
                                      • Introduced `blacklist_events` and `blacklist_sync_state` tables
                                      • Exposed tracker data through `/api/blacklist` and frontend event views
                                      Details

                                      Impact Notes

                                      • Initial incremental EVM + Tron event sync for major fiat-backed stablecoins
                                      • Introduced `blacklist_events` and `blacklist_sync_state` tables
                                      • Exposed tracker data through `/api/blacklist` and frontend event views
                                      Reconstructed from git commit history.4 commits
                                      • 093c11e
                                      • ea9dbab
                                      • 5158601
                                      • ac0d823