Skip to content

Latest commit

 

History

History
202 lines (148 loc) · 7.24 KB

README.md

File metadata and controls

202 lines (148 loc) · 7.24 KB

JoinMarket on the RaspiBlitz

A long standing coinjoin implementation with decentralised coordination and incentive structure.

Testing on a RPi4 4GB with RaspiBlitz v1.3

Check the current offers in the order book: https://joinmarket.me/ob/
Generated by this script when installed:
$ python ~/joinmarket-clientserver/scripts/obwatch/ob-watcher.py

One can coinjoin any amount within the offer limits by default with 5-7 random participants at a time. The taker fees are maximised, then the offers within the limits are randomly chosen to participate. Most parameters can be easily customized.

See this review thread about the GUI option: https://twitter.com/zndtoshi/status/1191799199119134720

Prerequisite

  • Need to activate the wallet of bitcoind

    $ sudo nano /mnt/hdd/bitcoin/bitcoin.conf

    disablewallet=0
    

    $ sudo systemctl restart bitcoind

Installation

  • Run in the RaspiBlitz terminal:

    git clone https://github.com/JoinMarket-Org/joinmarket-clientserver.git
    cd joinmarket-clientserver
    # latest release: https://github.com/JoinMarket-Org/joinmarket-clientserver/releases
    git reset --hard v0.5.5
    sudo apt install -y libltdl-dev libssl-dev # needed for Armbian
    ./install.sh
    # (follow instructions on screen; provide sudo password when prompted)
    # do not install QT-dependencies - running headless on the RPi
  • Activate the virtual environment to see the prompt: (jmvenv) $
    This needs to be done at every new login.

    $ cd joinmarket-clientserver
    $ source jmvenv/bin/activate
    $ cd scripts

    Tips: the commands can be run as one line if joined by && (meaning continue to run if successful):

    $ cd joinmarket-clientserver && source jmvenv/bin/activate && cd scripts

    The previously run commands can be easly searched from the prompt by pressing CTRL+R thanks to the command line fuzzy finder

Generate a wallet

  • Using the JoinMarket wallet: https://github.com/JoinMarket-Org/joinmarket/wiki/Using-the-JoinMarket-internal-wallet

    (jmvenv) $ python wallet-tool.py generate

    Created a new `joinmarket.cfg`. Please review and adopt the settings and restart joinmarket.
    
    • JoinMarket uses a hot wallet sitting on your Raspberry Pi. Keep it safe.
    • Backup your seed and store safely. Best to not keep the seed and the passphrase together.
    • The wallet encryption password will be needed every time when there is interaction with the wallet. Store it somewhere accessible, best if encrypted.
  • Fill in the PasswordB to the joinmarket.cfg
    (as in /mnt/hdd/bitcoin/bitcoin.conf)

    $ nano joinmarket.cfg

    [BLOCKCHAIN]
    rpc_user = raspibolt
    rpc_password = PasswordB-as-in-bitcoin.conf
    

    Press CTRL+O and ENTER to save and CRTL+X to exit.

  • Display the addresses to fund (look in mixdepth 0):

    (jmvenv) $ python wallet-tool.py wallet.jmdat

    and run again after the first time

Send payments through coinjoins with sendpayment.py

Run a Yield Generator

  • Read the basics: https://github.com/JoinMarket-Org/joinmarket/wiki/Running-a-Yield-Generator

  • Edit the settings:
    $ nano yield-generator-basic.py

    """THESE SETTINGS CAN SIMPLY BE EDITED BY HAND IN THIS FILE:
    """
    txfee = 100
    cjfee_a = 500
    cjfee_r = '0.00002'
    ordertype = 'swreloffer' #'swreloffer' or 'swabsoffer'
    nickserv_password = ''
    max_minsize = 1000
    gaplimit = 6
    
    • txfee is the maker's contribution to the miner fees (still paid by the taker). To reduce the minimum offer amount for swreloffer set it to 0.
    • cjfee_a is the fixed coinjoin fee to be earned when using swabsoffer
    • cjfee_r is the relative fee when using swreloffer. Specified as the fraction of the used amount.
    • max_minsize specifies the minimum offer size in satoshis (this is the minimum size the UTXO will end up to be after participating in coinjoin)
    • ordertype sets either a relative (swreloffer) or an absolute (swabsoffer) coinjoin fee model
  • Once set up run:

    (jmvenv) $ python yield-generator-basic.py wallet.jmdat

Check the transaction history

  • use the wallet tool:
    (jmvenv) $ python wallet-tool.py wallet.jmdat history

    add -v 4 to the end of the commadn for a more detailed list.

  • View the log of the transactions of the Yield Generator:
    $ cat ~/joinmarket-clientserver/scripts/logs/yigen-statement.csv press q to exit

  • Display as a table in the terminal:
    $ column -s, -t < ~/joinmarket-clientserver/scripts/logs/yigen-statement.csv | less -#2 -N -S

  • Monitor continously with:
    $ tail -f -n 100 ~/joinmarket-clientserver/scripts/logs/yigen-statement.csv

Keep the offers running in the background with Tmux

  • Install on the RaspiBlitz:
    $ sudo apt install tmux

  • Start:
    $ tmux

  • Work in the terminal as described above.
    Find a basic introduction at https://www.ocf.berkeley.edu/~ckuehl/tmux/

  • If the terminal is disconnected the processes in tmux keep running (as it is running on the Blitz) and can be returned to

  • when logged in after a disconnection run:
    $ tmux a
    to pick up where left off

Make JoinMarket communicate on Tor

  • Activate Tor in the SERVICE menu of the RaspiBlitz if not running already

  • Edit the joinmarket.cfg
    $ nano joinmarket.cfg

  • Comment out the clearnet communication channels (place a # on the front of the line - means it wont be used by the script):

    [MESSAGING:server1]
    #host = irc.cyberguerrilla.org
    
    ...
    
    [MESSAGING:server2]
    #host = irc.darkscience.net
    
  • Uncomment (remove the # from front of) the entries related for Tor:

    #for tor
    host = epynixtbonxn4odv34z4eqnlamnpuwfz6uwmsamcqd62si7cbix5hqad.onion
    socks5 = true
    
    ...
    
    #for tor
    host = darksci3bfoka7tw.onion
    socks5 = true
    

Resources: