Blacklist Tracker Changelog
Full version history of Blacklist Tracker methodology decisions, from v1.0 to v3.1.
Jump to Version
LatestLatest Version
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.
Impact Snapshot
- 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
v3.1Feb 25, 2026ReconstructedAPI-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
DetailsHide details
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
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
- d40060a
v3.0Feb 25, 2026ReconstructedIndexer-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
DetailsHide details
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
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
- e6de7eb
v2.2Feb 18, 2026ReconstructedPrecision 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)
DetailsHide details
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)
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)
- c6c1391
- 7bc5361
- e950f76
v2.1Feb 18, 2026ReconstructedPre-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
DetailsHide details
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
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
- d7e0ad4
v2.0Feb 12, 2026ReconstructedL2 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
DetailsHide details
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
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
- 58c4f05
- 77dad70
- 28a7ead
- add68dc
- fb7e7d6
- 7d9e677
v1.2Feb 11, 2026ReconstructedCoverage 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
DetailsHide details
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
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
- b257569
- 9281531
- eeb92e9
- 2fd5065
- 29a4759
v1.1Feb 11, 2026ReconstructedIngestion-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
DetailsHide details
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
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
- 1dec7aa
v1.0Feb 9, 2026ReconstructedInitial 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
DetailsHide details
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
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
- 093c11e
- ea9dbab
- 5158601
- ac0d823