JoinMarket is available on desktop as a graphical user interface (GUI) or as a terminal-based command line interface (CLI). It differs from other coinjoin protocols because it doesn’t have a centralized individual entity coordinator, but rather two user roles in a P2P (peer-to-peer) environment: makers (who provide liquidity for a fee) and takers (who pay a fee for liquidity and coordinate the transaction). Any user can be a maker or a taker.
The process begins with makers posting orders on the available messaging channels with the Yieldgenerator bot. These orders contain the counterparty's hash, the maker fee (in percent), the miner fee contribution (in btc), the minimum and maximum size, and the bond value (explained later). Takers choose Single Join or Multi Join (Tumbler) with their desired properties. The software then chooses the right makers and enters into a coordination process to create a coinjoin transaction.
There can be from 4 (theoretically as low as one) to 20 (10 is the maximum recommended to avoid problems) makers per transaction, but there can only be 1 taker at a time. Maker fees create economic incentives that attract liquidity and allow equilibrium to occur.
Joinmarket’s system inherits a sybil attack risk, because an attacker with a lot of liquidity can become dominant in the market, appearing as different makers and allowing him to deanonymize the rest of the users, with little cost to him. The solution is to increase the cost of the attack to incentivize honest behavior which is why fidelity bonds were introduced. Makers time lock their bitcoin UTXOs to create an opportunity cost for themselves. A reputation system where makers who lock larger amounts of BTC for longer periods of time are considered more trustworthy.
Makers also need to be protected against malicious takers. As a counterpoint to fidelity bonds, ring signatures are used by takers to anonymously prove ownership of UTXOs to makers, before entering into an agreement. This allows makers to collectively identify potential attackers and prevent takers from harming other makers.
Fees in percentage are variable but they become higher as you increase in liquidity, with most high liquidity (+1BTC) orders ranging around 0.001%. Order size ranges from 0.001 BTC to 240 BTC but there is no minimum or maximum protocol size. Coins are isolated in different mix depths (mixing wallet accounts) from 0 to 4, which increase after each coinjoin transaction, but rese from 4 to 0.
Joinmarket is the most censorship-resistant coinjoin on the market, because of the competitive nature of a peer-to-peer free market with many takers and makers. There is no single coordinator in Joinmarket but each round has a centralized coordinator.
Amounts are very flexible on Joinmarket, you can enter a coinjoin transaction with as little as 27300 satoshis (makes it accessible), and there’s no maximum amount.
You can get paid to gain privacy as a maker. A taker can pay low fees: as little as 0.05% for an anonymity set of 50.
Tor is enabled for the bitcoin network and coinjoin peer communication. If a user doesn't have it already, it can be installed alongside Joinmarket with a command. Bitcoin network privacy is solved by forcing a user to run Bitcoin Core and connect it to Joinmarket.
Uses fidelity bonds to protect against sybil attacks. Creates a reputation system where makers who lock larger amounts of BTC over longer periods of time are considered more trustworthy.
Takers have complete freedom to set up coinjoin transactions in terms of coin selection, number of peers, number of rounds, etc.
Ring signatures are used by takers to anonymously prove ownership of UTXOs to makers, before entering into an agreement. This allows makers to collectively identify potential attackers and prevent takers from harming other makers.
Joinmarket’s complex system creates significant user experience and design challenges such as the installation process, Bitcoin Core enforcement, fidelity bonds, maker user experience available only on CLI, onion service set up as a maker, etc. The learning curve is steep.
There is no concept of anonymity set / score on Joinmarket, and there is no difference between non-private and private UTXOs, except for mix depths, which doesn’t take into account the number of peers in a coinjoin transaction.
The lack of a centralized coordinator server run by an organization limits the amount of anonymity set / score a user can gain per transaction (compared to Wasabi 2.0), resulting in a longer process for a complete coinjoin experience.
Toxic change is present in Joinmarket transactions, leading to higher coinjoin inefficiency.
Taker coordinator is completely unblinded, does not use any kind of zero-knowledge method or Tor identity update, which leads to takers being fully aware of their peers' input and output linkages.
Sybil attacks are possible since mining fees for remixes are paid by the attack victims instead of the attacker, if the fidelity bond opportunity cost can be written off by the attacker.
If you have any comments or suggestions, please reach out to coinjoins@protonmail.com or open an issue on the GitHub repository. Thank you!