-
Notifications
You must be signed in to change notification settings - Fork 3
JoinMarket analysis
IMPORTANT: All results are very preliminary and gets updated while analysis is improved. Take it as work in progress, not stable results.
JoinMarket transactions are harder to detect from on-chain data than other types of common coinjoin transactions. We perform the following steps:
- Use Dumplings project to broadly detect JoinMarket candidates (stored in OtherCoinjoins.txt) and parse into
joinmarket_candidatesset. Wasabi 1.x, 2.x, and Whirlpool transactions are already excluded.- Dumplings code rules are updated as described in wiki joinmarket-scanning
- The scanning interval is extended to start on 1st January 2015 to capture early testing JoinMarket transactions.
- Filter out assured false positive TXs from
joinmarket_candidates:- All TXs with at least one OP_RETURN output. (more specific rule possible in future to search specifically for Omni, Runestone, Atom, and others - script type=TxNullData + specific bytes) [FILTER_REASON.OP_RETURN]
- All TXs where address reuse in inputs and outputs is over threshold (1/3=REUSE_THRESHOLD) [FILTER_REASON.ADDRESS_REUSE_THRESHOLD]
- All TXs with too many inputs or outputs - more than 100 (=NUM_INOUT_THRESHOLD) [FILTER_REASON.NUM_INOUT_THRESHOLD]
- All TXs with heavily imbalanced number of inputs to outputs (at least 4x more=INOUTS_RATIO_THRESHOLD) [FILTER_REASON.INOUTS_RATIO_THRESHOLD]
- All TXs with more than two different equal output denominations [FILTER_REASON.MULTIPLE_ALLOWED_DIFFERENT_EQUAL_OUTPUTS]
- All TXs with only two equal value outputs [FILTER_REASON.MIN_SAME_VALUES_THRESHOLD]
- Additionally, filter out TXs with less than 5 participants if not referenced from remaining coinjoins (
joinmarket_candidates) TXs (default configuration script for JoinMarket client increased number of participants to 5 from late 2019):- Detect set false_cjtxs_min5 of transactions with less than 5 participants (==4 or less equal value outputs)
- Iteratively return back transactions from false_cjtxs_min5 if referenced by at least one transaction from
joinmarket_candidates
- Reduce 'postmix' TXs only to the transactions referencing TXs left in
joinmarket_candidates
The described detection and filtering steps result in the following numbers of candidate transactions:
| Filtering | Number of TXs | Note |
|---|---|---|
| Initial txs by Dumplings (OtherCoinjoins.txt) | 219555 | all candidates by Dumplings |
| Number of filtered assured false positives | -57423 | all basic exclusion rules CJ_TX_CHECK.BASIC except only two equal outputs |
| Number of filtered only two equal outputs | -95574 | at least 3 same outputs (=participants) |
| Number of TXs with >2 & <5 equal outputs | -51221 | 3 or 4 equal outputs, before reference detection |
| Number of referenced >2 & <5 TXs | +6745 | below 5 equal outputs, but referenced from coinjoins |
| Total coinjoin transactions | 22082 | base set of coinjoins before more detailed analysis, 10.06% from initial Dumplings scan. |
| Total coinjoin transactions (without noremix TXs) | 20531 | base set of coinjoins without TXs not connected to any other coinjoin |
Number of postmix transactions is reduced from initial 794126 (Dumplings) to 77865 (9.80%) for the final set of coinjoins.
After filtering out false positives, the resulting set of JoinMarket coinjoin transactions (joinmarket_candidates) is analyzed by standard techniques (liquidity stats, plots...) and can be found on web with results.
IMPORTANT: These are only very preliminary results and hypotheses, needs deeper analysis and cross-verification.
A deeper analysis is still to be performed, but it seems that about half of all JoinMarket transactions were executed between 2015 and 2018 (first 3 years) - the space between yearly/monthly tickers is proportional to the number of transactions executed. From year 2018 till now (almost 8 years), relatively small number of transactions were executed per month (small tickers on x axis between yearly tickers), with two notable exceptions:
- June to July 2019: reason unknown, possibly Binance and Bitpoint hacks.
- May to November 2024: possibly due to unavailability of other coinjoin service due to shutdown of Samourai Whirlpool and zkSNACKs Wasabi 2.0 coordinators.
Particularly small number of JoinMarket transactions were detected for the period between 2022 and early 2024, typically with only 30-40 coinjoins in a whole month - time when both Whirlpool and Wasabi 2.0 were operational and significantly used.