I would like to know how I can detect bitcoin transactions that are mixed by Mixers' services? Is there any sample code or sample set or any applicable example in this regard?

Thank you

  • It's easy to find coinjoin transactions for whirlpool and wasabi. For custodial mixing services you can know transactions if you are aware of some addresses used by them.
    – user103136
    Feb 9, 2022 at 4:53
  • Thank you for the answer. Is there any reference for the mentioned addresses?
    – Motiv
    Feb 9, 2022 at 5:43
  • Hello, I am still looking for a way to detect mixer-created transactions in bitcoin. Can you please share an algorithm or sample with me? Thank you
    – Motiv
    Feb 27, 2022 at 3:26

1 Answer 1



Most of the transactions are 5 inputs, 5 outputs and use equal amounts (0.001, 0.01, 0.05 and 0.5). So we need to scan all blocks for such transactions and assume they belong to Samourai Whirlpool coinjoin implementation.

One project already exists which can make it easier to visualize and undertstand this: https://github.com/zeroleak/whirlpool-live


Example tx: 5553386e94b07112fb7b6789cae2f89f380ca20a28935812c51f0f3387bd5243


API can be used to check coinjoin transactions that are not confirmed yet and in mempool using https://wasabiwallet.io/api/v4/btc/ChaumianCoinJoin/unconfirmed-coinjoins

Example tx: 16a7c04139883d33997ed475918afcc4f54355478cb1737076cbb8b97c208316


snicker-finder.py can be used to find Joinmarket coinjoin transactions in blocks.

Example tx: 422e0aec25e667eebb1c453b446b65726440623c69b2ab381681ede2afd7c514

A project that helps in scanning coinjoin transactions for different coinjoin implementations:


  && mostFrequentEqualOutputCount >= 10 // At least 10 equal outputs.
  && inputCount >= mostFrequentEqualOutputCount // More inptu than outputs.
  && mostFrequentEqualOutputValue.Almost(Constants.ApproximateWasabiBaseDenomination, Constants.WasabiBaseDenominationPrecision) // The most frequent equal outputs must be almost the base denomination.
  && uniqueOutputCount >= 2; // It's very likely there's at least one change and at least one coord output those are distinct.
  && inputCount == 5 // Always have 5 inputs.
  && outputCount == 5 // Always have 5 outputs.
  && outputValues.Distinct().Count() == 1 // Outputs are always equal.
  && Constants.SamouraiPools.Any(x => x == poolSize) // Just to be sure match Samourai's pool sizes.

How to find transactions for custodial mixers?

  1. Find bitcoin addresses using search engines, social media, block explorers (OXT) etc.
  2. Use custodial mixers
  3. Read forum threads, blogs, newsletters etc. to know more about mixing services used
  4. Check transactions related to all these addresses

Example: Bitcoin Fog

  • Thank you. I do appreciate your help.
    – Motiv
    Mar 1, 2022 at 6:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.