Privacy pool contracts
How Forensia recognises a mixing contract, by name and by behaviour, and why it never links a deposit to a withdrawal.
#Plain languageIn plain terms
A privacy pool, often called a mixer, is a contract many people deposit into and later withdraw from. Inside, the link between who put money in and who took it out is hidden using cryptography. That is its purpose.
For tracing, a pool is where a trail goes dark. Forensia tells you when you have reached one. It does not attempt to match deposits to withdrawals, because any such match would be a guess.
#How it worksHow it works
There are two independent signals. First, a small number of well-known pools are in the public contract registry by address. Second, when you look up a contract directly, Forensia checks whether it emits the pair of events that this kind of pool emits.
#Technical detailThe exact rules
By registry
Eight contracts are listed as privacy pools: five Tornado Cash contracts and three RAILGUN contracts. When one appears among an address's counterparties, the result notes the interaction.
By event pattern
For any contract you look up, two event signatures are searched for in a recent window:
Deposit(bytes32,uint32,uint256)
Withdrawal(address,bytes32,address,uint256)The window is the network's token window capped at 4,000 blocks, and shorter when the configured provider limits log queries to a smaller span. Each signature is one eth_getLogs request, filtered to logs the contract itself emitted.
| What is seen | Finding | Confidence |
|---|---|---|
| Both events observed in the window | finding:privacy-pool-event-surface | Low |
| The pair was not observed, or the event window was unavailable, but the verified interface declares both | finding:privacy-pool-verified-interface | Medium |
Both findings are class lead. Both events are required for the first one. A contract that only shows deposits, or only withdrawals, is not flagged.
#LimitsWhat it does not tell you
- These event signatures can be copied by unrelated contracts. A match does not identify a specific protocol or operator.
- The window is not the whole anonymity set. Most of a pool's history lies outside it.
- There is no denomination check, no timing analysis and no estimate of how many users are in the pool.
- From a wallet's side, the only privacy-pool signal is the registry name of a contract it dealt with.
- Using a privacy pool is lawful in many places and is not, by itself, evidence of wrongdoing.