Let's say that chainanalysis has been tracking my on-chain bitcoin transactions.
They then notice I have sent my bitcoin into Whirlpool, the coinjoin implementation by @SamouraiWallet
Next they have to determine where my bitcoin has gone...
In a Whirlpool coinjoin, 5 parties (or wallet clients) come together to create a collaborative transaction which has:
5 x input UTXOs
5 x output UTXOs
Each input belongs to 1 client.
Each output belongs to 1 Client.
All outputs are equal.
So which output belongs to me?...
Observing on-chain you cannot determine which one of the 5 outputs is my bitcoin, as all deterministic links have been broken.
So I could be 1 of 5, right? Well I could actually be WAY more than 5!
Enter Whirlpool Forward-Looking Anonymity Sets...
Due to the architecture of Whirlpool, UTXOs which remain in pool denomination sizes (0.5, 0.05, 0.01, or 0.001 BTC) can continue to remix for free.
So after my first mix, if I, or one of my mixing peers remixes, the crowd which I am hiding in increases from 5 to 9.
Chainanalysis can no longer assume I am 1 of 5, but instead now 1 of 9.
9 is my new Forward-Looking Anonymity Set.
My equal output UTXO from my first mix does not need to remix for my Forward-Looking Anonymity Set (the crowd in which I'm hiding in) to increase.
In this graphic my UTXO from my first mix is the red dot.
I have not remixed.
2 mixing peers have continued to remix.
My new Forward-Looking Anonymity Set is now 21.
Chainanalysis would have to pursue 21 different leads in an attempt to track me since entering Whirlpool.
Even if Chain Analysis were to pursue all 21 leads, they could not say with any certainty which one is my UTXO. This is because for every Whirlpool coinjoin transaction there are no deterministic links between the inputs and outputs.
So how do you work out the Forward-Looking Anonymity Set to see how large the crowd is that YOU are hiding in?
Try using oxt.me, from the first mix transaction manually expand each output which is remixed...
...mark in orange any UTXO which is unspent (remaining in a Whirlpool pool size), and mark any UTXO which is spent (leaving Whirlpool).
Add up the orange lines to get your Forward-Looking Anonymity Set, in this example 33.
This works well for smaller numbers, but Whirlpool mixes occur frequently (average of 215 mixes per day in the 0.001 pool so far during 2022).
Manually counting the Forward-Looking Anonymity Set can quickly become impossible.
Queue Whirlpool Stat Tool...
Whirlpool Stat Tool uses a set of python scripts to calculate your Forward-Looking Anonymity Set for you.
Enter in the Transaction ID from your first mix and it'll tell you the size of the crowd you're hiding in since this Whirlpool coinjoin occurred.
Let's see how large the crowd its participants are hiding in...
28 days after mix.
Forward-Looking Anonymity Set = 1,644
35 days after mix.
Forward-Looking Anonymity Set = 6,722
60 days after mix.
Forward-Looking Anonymity Set = 20,475
(Screenshot from Whirlpool Stat Tool)
Hiding in a crowd of 20,000 it is now impossible (dare I say it) for any chainanalysis company to determine where the original mix participant's bitcoin is. Perhaps they've already left Whirlpool and spent their bitcoin, or maybe they have stuck around to get free remixes.
What I find interesting about this particular transaction ID is that one of the outputs remains unspent (just like the red dot of the earlier graphic).
This unspent output has remained this way since the transaction was confirmed into block 728735 on 24th March 2022...
...and yet this unspent output has benefited from Whirlpool's architecture, as three of the other participants went on to remix.
This allowed this unspent output of 0.001 BTC to gain a larger Forward-Looking Anonymity Set without remixing itself...
...if none of the outputs from this transaction went on to remix, the Forward-Looking Anonymity Set would remain at 5.
It's important to remember that all deterministic links are broken after 1 mix, but you get greater privacy benefits if you, or other peers remix...
...so what's the best practice to better your Forward-Looking Anonymity Set when using Whirlpool?
- Mix as soon as possible, building up a spending balance in your Postmix wallet.
- Allow your Postmix bitcoin to remix for free.
Prepare, doing this ahead of time.
For remixing:
- run the Whirlpool GUI desktop application.
or better yet
- run a RoninDojo node.
Using either makes your Postmix bitcoin eligible for free remixing 24/7.