Tuesday, December 3, 2019

Brief introduction to Joinmarket (coinjoin implementation), incl setup guides for RaspiBolt and RaspiBlitz nodes

To understand the purpose and functionality of Joinmarket, you should first understand the basics of the CoinJoin mechanism. Some basic level introduction to CoinJoin can be found here:

https://bitcoinmagazine.com/articles/coinjoin-combining-bitcoin-transactions-to-obfuscate-trails-and-increase-privacy-1465235087 (includes a brief description of Joinmarket as well)

https://en.bitcoin.it/wiki/CoinJoin


What is Joinmarket?

Joinmarket is essentially a wallet with a very specific purpose: it enables users to do automated coinjoins (mixing of UTXOs) with each other. The user can assume the role of a Maker, offering their coins as being available for coinjoins, thus providing liquidity and earning small fees if their coins are being chosen for a mixing round. Or the user can assume the role of a Taker, choosing from the pool of available coins to initiate a mixing round.

Of course, the roles are not permanently fixed and the user can switch between them at any time desired. The coins never leave the user’s wallet and can be transferred out at any given point in time, so the wallet is non-custodial and trustless. Joinmarket requires the user to use their own node for that purpose.

So besides the basic wallet functionality, Joinmarket serves as a platform to match coinjoin Makers and Takers. Both profit in increased privacy for their coins, and Makers additionally profit from the small fees the Takers pay. The matching and mixing processes happen automatically, users only need to adjust some few settings (or simply use the default ones), fund their wallet and run the software.

For the role of a Maker the user runs the “Yield Generator” (automated script creating an offer), and for the role of a Taker there are two options of either sending a single coinjoined payment or to run the “Tumbler” for multiple coinjoins. Again, all these are automated functions, only requiring the funding of the wallet and starting the software with some few parameters.

Although Joinmarket has been available for almost four years and has a dedicated user base (and a stable liquidity pool), there is quite a hurdle for the set up as it requires working with command line interface. But it can be done by simply copypasting commands from the various guides. There is also a basic GUI (graphic user interface) available after the set up process.

More information:

Bitcoin Wiki (high level overview): https://en.bitcoin.it/wiki/JoinMarket

GitHub (source code, installation, technical infos): https://github.com/JoinMarket-Org/joinmarket

Video presentation by u/belcher_ (one of the creators): https://www.youtube.com/watch?v=hJZnkm0jW5E

Video demo by u/waxwing (one of the creators): https://www.youtube.com/watch?v=hwmvZVQ4C4M

Joinmarket subreddit: https://reddit.com/r/joinmarket/


Joinmarket set up guide for RaspiBolt: https://github.com/kristapsk/raspibolt-extras/blob/master/joinmarket.md

RaspiBlitz: https://github.com/openoms/bitcoin-tutorials/blob/master/joinmarket/README.md

[Note: if you only want to use Joinmarket as a Taker (using the Tumbler or the Sendpayment options) you don’t necessarily need the guides for RaspiBolt/RaspiBlitz. You can simply install Joinmarket on your desktop and let it connect to your node (you only need to adjust the joinmarket.cfg file, and possibly your bitcoin.conf file on your node, so Joinmarket can connect to it). You will need a running node in any case though (it can be a pruned node).

The reason why you would want to install Joinmarket on a Raspibolt/Raspiblitz itself is that when using the Maker feature (Yield Generator), it should be running continuously so Takers can take up your offer at any time they wish.]



No comments:

Post a Comment