I saw someone tweet about it and decided to give it a try. I generally try to explore all apps available on the Raspiblitz but it’s too much all at the same time. It’s best to load up one each time and go through it all, they can get quite complex and frustrating.
Which did nothing to prepare me for the complexity and frustration of joinmarket.
First of all, what is it?
It’s a market for coinjoins.
What are coinjoins, you may ask?
In simple terms, the blockchain makes every transaction trackable. Every bitcoin has a dogtag. You thought bitcoin was anonymous?
No, it’s pseudonymous. Meaning, sure, you might not know who that BTC address belongs to, but if they made the mistake of using it somewhere else authorities can do some old-fashioned investigating and find you. Bitcoin is not for criminal activities, no matter how much FUD people try to smear on it.
Also, you might have heard of the recent “clean” BTC blocks that got approved last month. This is hilarious for bitcoiners because we know that you can coinjoin the bitcoins and it all washes away.
So, what is coinjoin?
It’s an automated service, all done by code, where you make a quick transactions and mix up many coins together, about 5-8 participants, and then portion each one his own amount, minus fees. That basically messes up the metadata and makes the coins untraceable again.
And Joinmarket is a platform to do that. It’s been around for about 6 years, so it has had quite a bit of development. Openoms has a tutorial here https://openoms.github.io/bitcoin-tutorials/joinmarket/
And a video tutorial here https://www.youtube.com/watch?v=uGHRjilMhwY
Alternatively you can follow this tutorial https://www.keepitsimplebitcoin.com/joinmarket/
Or this one https://github.com/kristapsk/raspibolt-extras/blob/master/joinmarket.md
The installation process on Raspiblitz is simple, you go to the menu and tick the Joinmarket option. It loads up a bunch of installation scripts and you simply follow the instructions.
Once it’s installed, you’re gonna need to login as joinmarket. The script creates a new user with that name. Password is your admin password B.
Once you’re in, it prompts you for a GUI interface. Here are the instructions:
Showing intructions for Windows
Instructions to open the JoinMarket-QT GUI on the desktop
Download, install and run XMing with the default settings – https://xming.en.softonic.com/
Open Putty and fill in:
Host Name: 192.168.1.2
Under Connection set:
Data -> Auto-login username: joinmarket
SSH -> X11 -> [x] Enable X11 forwarding (This is under a separate tree of options, click to open all)
The settings can be saved in Session -> type a name under Saved session -> Save
Make sure that Xming is running (the icon is present on the taskbar)
Open the connection
Use the PASSWORD_B to log in
In the terminal Exit to the Command Line and type:
The QT GUI will appear on the Windows desktop running from your RaspiBlitz.
The graphical interface will run on the desktop relayed from the node via an encrypted ssh tunnel.
See the walkthrough for the JoinMarket-Qt GUI to send payments with coinjoin or run multiple coinjoins (tumbler):
Video demonstration of using the JoinMarket-Qt GUI by Adam Gibson (waxwing):
See this review thread about the QT GUI:
Press ENTER when done with the instructions to exit to the menu.
I followed those instructions and got nothing. You have to:
download xming https://xming.en.softonic.com/
download putty https://www.putty.org/
It failed to load the GUI. No worries, because Openoms says in the video that you can’t run a joinmarket yield anyway, so let’s skip that.
Now, in the cmd we Ctrl+C to get to the command prompt of Raspiblitz. We type jm, which loads sudo joinmarket.
Username joinmarket, password your admin password B.
The interface is a bit clunky, but it works okay. You might notice that you can’t go up and down with arrows. But, weirdly enough, you can click them with the mouse. Or just type the first letter for the menu, it’s red M for Maker, for example.
You create a new wallet, follow the instructions, write down the seed words as always.
Then you send some bitcoin to the address. It’s under INFO Show the address list and balance/m0 Show the first mixdepth to deposit to.
Once the funds are there, you can go to MAKER Yield Generator Options. Maker is the one providing liquidity for coinjoins, Taker is the one asking for it. It sounds kinda naughty. Basically Maker is the business and the Taker is the customer.
Under Yield Generator Options we select Maker, Run the Yield Generator. You have to type the wallet filename and then provide the password you set earlier.
You do not have the minimum required amount of coins to be a maker: 5999999
Try setting txfee to zero and/or lowering the minsize.
And that’s where I’m stuck. It says I don’t have enough coins, and it’s telling me it needs 6 million satoshis. That’s gotta be wrong, ’cause I saw somewhere smaller amounts. Of course bigger wallets are better but you can still provide the service, right?
Back at Openoms tutorial https://openoms.github.io/bitcoin-tutorials/joinmarket/ we find the Running a Yield Generator tutorial https://github.com/JoinMarket-Org/joinmarket/wiki/Running-a-Yield-Generator
Things You Need
- A local Bitcoin full node running with JoinMarket. Using a method that queries a third-party server (like blockr.io or electrum servers) is slower, is more likely to hang or crash and generally makes the user experience worse. It also reveals your addresses to the server operator!
- A reliable, relatively fast, always-on internet connection. CoinJoins require multiple people to take part, if one yield generator times-out or is slow, the entire process is held up or must be restarted. People are looking for joins 24/7, so you’ll need to run Joinmarket all the time to make joins as well. The entire point of a market maker is to offer a deal immediately, without any waiting or hold-ups.
- A significant enough Bitcoin balance in your joinmarket wallet to offer a wide range of coinjoin amounts. If you can only offer from zero to 10000 satoshi, you’re unlikely to get many coinjoin deals. The bigger your balance, the better.
- Update often. This software is still in the very early stages. Keep an eye out of updates. Perhaps subscribe to the twitter or subreddit to get news about updates.
Requirements / How-to
You will need to:
- Install JoinMarket.
- Configure a Bitcoin full node to use Joinmarket.
- Create and name a Joinmarket wallet using the command:
python wallet-tool.py generate
- List the addresses held in this newly created Joinmarket wallet using the command
python wallet-tool.py yournewwallet.jsonwhere “yournewwallet” is the name of the wallet you just created. Note a bitcoin address in the 0th level.
- Send some Bitcoins to the address you noted. The more the better, as larger wallets are more scarce and can command a higher fee.
- Edit the yield-generator-*.py variant of your choice for your desired fees, then run this variant yield-generator.py on a permanently-on computer with a stable internet connection. Eg: ‘python yield-generator-basic.py yournewwallet.json’
- Wait and be patient. The volume of joins is always dependent on the number of takers. You should see a number of user names posting offers at least every few minutes in the IRC chat. A successful join may take a day or longer to appear.
You don’t have to go in and edit the files, there’s an option in the interface. It’s under JMCONF YG settings in the joinmarket.cfg.
Continue and edit the file. Carefully, without typing stuff or deleting commands or pressing enter, you look for the following:
Now. Set txfee low, e.g. 1 or 0 so it goes through for now, and minsize to like 100. I dunno. Save and then try again.
And it failed again for me. I’ll try adding more funds in the future and running it again. Let me know in the comments if you had more luck.