When funds are stolen in a crypto scam, the money rarely sits still. Within minutes it moves through intermediary wallets, splits across addresses, and lands at an exchange. Investigators who want to follow it face one core question at every hop: when stolen funds mix with legitimate funds in the same wallet, how much of what comes out is still "dirty"?
Taint analysis is the answer to that question. It is one of the foundational techniques behind blockchain fund tracing, and understanding it explains both what modern investigation tools can do and where they hit limits.
This guide explains what taint analysis is, the three methods investigators use, and one worked example on Ethereum so you can see exactly how each method behaves.
What is taint analysis?
Taint analysis estimates what share of a wallet's balance originated from a known illicit source, then follows that share as the funds move on.
The idea rests on a simple label. Coins connected to a theft, scam, or sanctioned address are tainted; coins with no such connection are clean. Because a single wallet almost always holds a mix of both, the technique needs a rule for splitting outgoing transfers into their tainted and clean portions.
Tainted vs clean funds
Imagine an address that receives 3,000 USDT stolen from a scam victim and, separately, 7,000 USDT from ordinary trading. The wallet now holds 10,000 USDT, of which 3,000 is tainted. When that address later sends 9,000 USDT to an exchange, an investigator has to decide how much of the outgoing 9,000 counts as tainted. Different rules give different answers, and that choice is what separates the three methods below.
Why it matters
Investigators use it to prioritize. They cannot freeze an entire chain of transactions, so they need a defensible estimate of which downstream addresses hold stolen value and how much. That estimate is what gets shared with an exchange's compliance team or included in a report to law enforcement.
Why taint analysis exists
The difficulty comes from how blockchains combine funds. On an account-based chain like Ethereum, a wallet's balance is a single pooled number, so once tainted and clean funds land in the same address they are financially indistinguishable. Nothing in the raw transaction record says "this 9,000 USDT transfer spent the dirty money, not the clean money."
Taint analysis fills that gap with an explicit accounting rule. Researchers have catalogued three standard tainting methods called Poison, Haircut, and FIFO. The rules apply to any public blockchain that records transactions openly, including account-based chains like Ethereum and the other EVM networks where most token theft occurs.
The three methods, with one worked example
The three methods are Poison, Haircut, and FIFO. Poison marks every output of a tainted transaction as fully dirty; Haircut splits the taint proportionally across outputs; FIFO assigns taint by chronological order of deposits.
Take the wallet from earlier: it holds 10,000 USDT on Ethereum, of which 3,000 is tainted (from a victim) and 7,000 is clean. It sends 9,000 USDT to an exchange deposit address. Here is how each method labels that outgoing 9,000.
Poison: taint everything it touches
The Poison method treats every output of a transaction that involves any tainted input as fully tainted. It does not matter how small the dirty portion is.
In our example, the entire 9,000 USDT transfer is marked tainted, and the exchange deposit address is flagged as having received stolen funds. The problem is obvious: clean funds get relabeled as dirty, and the pool of "tainted" coins grows every time it touches a new wallet. Poison is the least precise method, and investigators mostly use it as a blunt baseline rather than a working estimate.
Haircut: taint proportionally
The Haircut method also treats every output as carrying taint, but it assigns each one a proportional share rather than the full amount. The tainted portion of the wallet was 3,000 out of 10,000, or 30%, so 30% of the outgoing transfer is counted as tainted.
That means 2,700 USDT of the 9,000 is labeled tainted and 6,300 is clean. Haircut is more realistic than Poison because it preserves the total amount of dirty money instead of inflating it. Its weakness is that it smears a little taint across a very large number of addresses, which makes long traces noisy.
FIFO: taint in order
The FIFO (first-in, first-out) method ignores proportions and looks at order instead. Funds leave the wallet in the same sequence they arrived: the first deposit in is the first spent out.
In our example, the clean 7,000 USDT arrived before the tainted 3,000. Under FIFO, the first 7,000 USDT of the outgoing transfer is clean, and only the next 2,000 is tainted. The remaining 1,000 of tainted funds stays in the wallet. FIFO produces the most precise and least noisy trace, which is why it is the method most often used when the goal is a defensible blacklist or an evidence-grade report.
| Method | Rule | Outgoing 9,000 USDT | Precision |
|---|---|---|---|
| Poison | Any taint makes the whole output tainted | 9,000 tainted | Lowest — inflates dirty pool |
| Haircut | Proportional share of taint | 2,700 tainted | Medium — noisy over long traces |
| FIFO | First in, first out by order | 2,000 tainted | Highest — cleanest trace |

The three taint-analysis methods labeling the same 9,000 USDT outgoing transfer. FIFO (highlighted) produces the least noisy trace.
What taint analysis can and cannot do
Taint analysis is powerful, but it is an estimate, not a certainty, and honest reporting depends on knowing its limits.
It works well when funds move through ordinary transfers and swaps. It struggles in three situations. Mixers deliberately break the link between deposits and withdrawals, so taint has to be re-established with statistical methods rather than direct tracing. High transaction volume spreads taint across so many addresses that Haircut-style estimates lose meaning. And cross-chain bridges move value between ledgers, so a trace has to be stitched back together on the other side.

How taint analysis behaves in three common scenarios. Ordinary transfers trace cleanly; mixers and bridges each require an additional technique on top of taint analysis.
None of these fully defeats tracing, but each one is a place where the method a tool uses, and how carefully it is applied, changes the answer.
Taint analysis vs full fund tracing
Taint analysis and full fund tracing are related but not identical. Taint analysis is the accounting rule; full fund tracing is the end-to-end investigation.
Taint analysis answers a narrow question at every hop: given a wallet that received tainted funds, how much of the outgoing transfer is dirty? It is one rule applied repeatedly.
Full fund tracing is the whole investigation: identifying the theft transaction, applying an apportionment rule at each hop (which may or may not be a textbook Poison / Haircut / FIFO rule), walking the graph, attributing addresses to real entities (exchanges, mixers, bridges), and producing a report someone can act on. Taint analysis is one conceptual lens inside that work, alongside address labeling, cluster analysis, and cross-chain matching.
When an analyst does apply a taint method explicitly, FIFO is preferred for evidence-grade reports, Haircut for exploratory analysis across many addresses, Poison rarely.
How this thinking shows up in modern tools
Applying any hop-by-hop accounting rule by hand across thousands of transactions and several chains is not realistic, so investigators rely on fund-tracing tools.
BlockSec's MetaSleuth is the analyst-facing tool for this work: it reconstructs fund flows so an investigator can walk the graph hop by hop, cluster addresses, and attribute them to real entities — as in its case study of the LI.FI attack. Trace AI automates the same investigative work with an AI agent: a user describes a theft and provides a wallet address or transaction hash, and the agent traces the funds across the chains it supports and produces a fund-flow report with the entities the money reached.
These are fund-tracing tools, not taint-analysis implementations. The taint rules described above share the same underlying question — what portion of what came out is still dirty? — but production tracing tools typically use their own graph, clustering, and attribution methods rather than a textbook Poison / Haircut / FIFO rule. Understanding taint analysis is still useful, because it clarifies the kind of decision every tracing tool has to make at each hop.
Frequently asked questions
Is taint analysis accurate? Taint analysis produces a defensible estimate, not a certainty. Its accuracy depends on the method used and the complexity of the trace. FIFO gives the cleanest results for ordinary transfers, while mixers and very high transaction volumes reduce confidence and call for additional techniques.
What is the difference between the Poison and Haircut methods? Both treat every output of a tainted transaction as carrying taint, but Poison marks each output as fully tainted, while Haircut assigns each a proportional share. Poison inflates the total pool of dirty funds; Haircut preserves it, which makes Haircut more practical.
Can taint analysis track funds through a mixer? Not directly. Mixers are designed to break the link between deposits and withdrawals, so simple taint rules cannot follow funds straight through. Investigators re-establish the connection using statistical and behavioral analysis, which is harder and less certain than tracing an ordinary transfer.
Is it illegal to hold tainted crypto? Holding funds that a tool labels as tainted is not automatically illegal, and taint labels are estimates rather than legal judgments. That said, exchanges may freeze deposits linked to theft, and knowingly handling stolen funds carries legal risk. Taint analysis flags where to look; it does not decide guilt.
What blockchains does taint analysis work on? The principles apply to any public blockchain that records transactions openly, including account-based chains like Ethereum and the other EVM networks where most token theft occurs. The exact mechanics differ between transaction models, but the tainted-versus-clean logic is the same.
Related reads
- Illicit fund flow case study: the LI.FI attack
- How to use MetaSleuth to track stolen funds
- Trace AI: track stolen crypto with an AI agent
See how AI-driven investigation applies this across chains. See how Trace AI works →
About the author. Andy is a security researcher at BlockSec, where he focuses on on-chain fund tracing and the mechanics behind MetaSleuth. This piece draws on the investigative patterns his team applies to real theft cases across EVM chains.
References
- Tironsakkul, Maarek, Eross, Just — Probing the Mystery of Cryptocurrency Theft: An Investigation into Methods for Taint Analysis, arXiv:1906.05754 (2019). https://arxiv.org/abs/1906.05754



