"Tax enforcement in crypto does not rely on breaking cryptography, but on reconstructing taxable behavior through data, entry/exit points, and risk-based analytics."
— Anthelme N'DRI · Crypto Tax Africa Conference 2026 · Fiat-Crypto Link Engine
Real Professional Tools — Market Context
| Tool | Price / year | Used by | Africa presence |
|---|---|---|---|
| Chainalysis Reactor | $50,000+ | IRS, Europol, SARS, Interpol | South Africa only |
| Elliptic Investigator | $20,000+ | Barclays, Standard Chartered | None deployed |
| TRM Labs | $30,000+ | US DOJ, KRA Kenya | Limited |
| Crystal Blockchain | $15,000+ | EU tax authorities | None |
| This System | Public instance | Tax administrations | Open to any administration |
What This Terminal Does
VASP Identification
Recognizes Binance, Yellow Card, Paxful hot wallets from public blockchain data and OSINT cluster databases.
Wallet Clustering
Links multiple addresses to the same beneficial entity via common-input ownership heuristics and on-chain patterns.
Fiat Bridge Detection
Traces mobile money (Wave / Orange Money) on-ramps and GTBank / M-Pesa off-ramp patterns across the P2P layer.
Tax Event Classification
Auto-classifies CGT, income, P2P gap, acquisition and WHT events — mapped to model tax treaty framework.
Dossiers de travail — jeux de test, cliquez pour charger
🇨🇮
Kofi Asante
⚠️ MEDIUM — 47/100
🇳🇬
Ngozi Babatunde
🔴 HIGH — 78/100
🇪🇹
Dawit Bekele
🚨 CRITICAL — 91/100
Trois dossiers de test construits sur des motifs on-chain réels (montants et identités anonymisés). Cliquez pour charger un dossier, ou saisissez n'importe quelle adresse dans l'onglet Trace.
Investigation Input
🧪
Embedded scenario mode — no blockchain call. The three working files
(Kofi, Ngozi, Dawit) are fictional test sets: truncated addresses, simulated amounts
and counterparties. The graph, risk profile and report are computed locally from this
data. No address entered here is queried on-chain.
Wallet Address (scenario or manual entry)
Network
Hop Depth
Demo scenarios (fictional)
Terminal Output
// Ready. Enter address or select scenario to begin.
Wallet Details
— No trace yet —
Awaiting trace...
Balance
—
Total In
—
Total Out
—
Tx Count
—
Connected Entities
Run trace to identify connected entities.
Transaction Ledger
| Hash | Date | From → To | Amount | Dir | VASP | Tax Event |
|---|---|---|---|---|---|---|
| No transactions loaded. Run a trace above. | ||||||
Transaction Graph — Kofi Asante
8 nodes · 11 edges · 2-hop trace · Ethereum mainnet
Personal Wallet
Exchange (CEX)
On/Off Ramp (Fiat)
Unknown / P2P
Cold Wallet
Unidentified Address
Graph interpretation:
Node size is proportional to entity importance (exchange nodes are largest). Edge thickness scales with transaction volume. Dashed edges indicate unverified / P2P counterparties. Orange edges with ⚡ mark capital gains tax events. The "Highlight Tax Events" button animates pulsing rings around flagged nodes.
Profile Comparison
| Kofi (Abidjan) | Ngozi (Lagos) | Dawit (Addis) | |
|---|---|---|---|
| Risk Score | 47 — MEDIUM | 78 — HIGH | 91 — CRITICAL |
| Volume | $1,002 | $45,000 | $271,875 |
| P2P ratio | 43% | 78% | 0% (mining) |
| Declaration | Unknown | No | No |
| Action | Quarterly review | Audit now | Priority: $271K |
Methodology
Risk scoring combines four weighted components:
Volume Risk (15%) — crypto volume vs declared income ratio.
Transaction Pattern (30%) — P2P proportion, frequency, cross-chain.
Exposure Risk (25%) — VASP KYC status, unidentified counterparties, mixer proximity.
Compliance Risk (30%) — declaration history, prior audits, jurisdiction gaps.
Model based on FATF VASP guidance + Africa Crypto Tax Framework draft (2025).
Volume Risk (15%) — crypto volume vs declared income ratio.
Transaction Pattern (30%) — P2P proportion, frequency, cross-chain.
Exposure Risk (25%) — VASP KYC status, unidentified counterparties, mixer proximity.
Compliance Risk (30%) — declaration history, prior audits, jurisdiction gaps.
Model based on FATF VASP guidance + Africa Crypto Tax Framework draft (2025).
📨 VASP Data Request Template (click to expand)
▼
🛡️ UN / OFAC Sanctions Screening
Automated screening of wallets and counterparties against the UN Security Council Consolidated List
(1267/1989 ISIL–Al-Qaida; 1988 Taliban; 1533 DRC; 2374 Mali; 2734 Sudan; 751 Somalia; 1970 Libya…) and the
US OFAC SDN list (SDN + aliases + addresses published by OFAC in its remarks).
Matching is exact, approximate (≥ 0.88) and partial on discriminating tokens — the same rules as the command-line
screener
_vpsdata/sanctions_screen.py.
Wallet address or entity name / alias
Type
Every example above was checked against the loaded index: the first five return a hit, the
null address returns none. Tornado Cash and JNIM no longer appear under those labels
in the published index (OFAC 2025 delisting / UN transliteration): quoting them as examples
made the engine look broken.
On a HIT — immediate actions
Freeze the wallet/funds immediately · file an STR/SAR with your FIU (CENTIF, FIC, NFIU, FRC…) · do not notify the counterparty (tipping-off) · apply the UNSC obligation of immediate freezing without prior notice, and the US 50%-ownership rule context where relevant.
Sanctions ↔ crypto tracing
Cross-reference the screened wallet against the graph: one hop to a sanctioned mixer (Tornado Cash, Blender, Sinbad) raises the risk profile to CRITICAL and triggers a report — even without a direct list match.
Freshness matters
Lists change weekly. Production mode must pull the OFAC SDN (sdn.csv) and UN Consolidated List on a schedule, hash the dataset, and keep an audit log of every screening query.
Due process
A HIT is a trigger to verify, not a conviction. Names can collide (false positives) — always verify identifiers (date of birth, nationality, listing ID) before freezing. Document all decisions.
Indexed data — coverage (read from the generated index)
| List | What it contains | Entries | Examples from the index |
|---|
Batch screening — one address or name per line (
# = comment)Provenance, freshness and replay
How to rebuild, hash and verify this index
cd _vpsdata python build_sanctions_lists.py --drop-raw # downloads the official files, hashes them (SHA-256) python export_web_sanctions.py # writes data/sanctions_*.json + the index fingerprint python sanctions_screen.py --file cas_pratique_vasp_wallets.txt # command-line screening, same rules as this page python build_cas_pratique_vasp.py # worked case: declared VASP wallet list -> audit trail python build_note_afrique.py # note + CSV annex on the Africa-flagged entries node _test_sanctions_core.js # regression test of the shared matching engine node _test_page_sanctions.js # engine + page logic, real index and offline fallback node _test_page_browser.js # real Chromium: all tabs, screening, CSV exports node _test_page_cas.js # worked-case page checked against its audit JSON # The index is fetched at runtime, so the folder must be served over HTTP. # Opening the file directly (file://) blocks fetch(), and the tab falls back to the # frozen August 2026 sample — labelled as such in the pill, the tab and the footer. cd ..\conference_crypto_taxation\conference_site python -m http.server 8000 # then open http://localhost:8000/blockchain_tracer.html # Official sources # OFAC SDN : https://sanctionslistservice.ofac.treas.gov/ (SDN + ALT + ADD files) # UNSC list: https://main.un.org/securitycouncil/en/content/un-sc-consolidated-list # EU FSF : endpoint in error at build time — declared missing, never silently dropped