From 26e6e15acce3d395d3c6bcab11d8f004d545c8c3 Mon Sep 17 00:00:00 2001 From: AdamISZ Date: Wed, 27 Mar 2019 16:51:19 +0100 Subject: [PATCH] Minor updates to docs on installation and usage; add segwit donation address to Qt About page. --- README.md | 11 ++++++----- docs/INSTALL.md | 8 ++------ docs/JOINMARKET-QT-GUIDE.md | 5 +++-- docs/TESTING.md | 14 +++++++++++--- docs/USAGE.md | 23 ++++++++++++++++++----- scripts/joinmarket-qt.py | 7 ++++++- 6 files changed, 46 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 9dd66d4..aea41b9 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,10 @@ Joinmarket is coinjoin software, and includes a wallet, which requires Bitcoin C ### Quickstart -Once you've downloaded this repo, either as a zip file, and extracted it, or via `git clone`: +Once you've downloaded this repo, either as a tar/zip file, and extracted it, or via `git clone`: + +Make sure to validate the signature on the tar/zip file provided on the [https://github.com/Joinmarket-Org/joinmarket-clientserver/releases](release page), +or check the signature in git if you install that way using `git log --show-signature`. ./install.sh (follow instructions on screen; provide sudo password when prompted) @@ -27,9 +30,7 @@ Once you've downloaded this repo, either as a zip file, and extracted it, or via (You can add `-p python2` if you want to use Python2. You can also add `--develop` as an extra flag to `install.sh` to make the Joinmarket code editable in-place.) -For the Qt GUI, pass the `--with-qt` flag to `install.sh` as well : - - ./install.sh --with-qt +You can optionally install a Qt GUI application, you will be prompted to choose this during installation. Do note, Python 2 is incompatible with the Qt GUI. @@ -58,7 +59,7 @@ It's possible but unlikely that the Python2 version will be fixed, but in any ca If binaries are built, they will be gpg signed and announced on the Releases page. -If you haven't used the `--with-qt` flag during installation with `install.sh`, then to run the script `joinmarket-qt.py` from the command line you will need to install two more packages. Use these 2 commands while the `jmvenv` virtual environment is activated: +If you haven't chosen the Qt option during installation with `install.sh`, then to run the script `joinmarket-qt.py` from the command line you will need to install two more packages. Use these 2 commands while the `jmvenv` virtual environment is activated: ``` pip install PySide2 diff --git a/docs/INSTALL.md b/docs/INSTALL.md index b23c276..8b7ad34 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -8,12 +8,8 @@ See [here](SEGWIT-UPGRADE.md). #### Notes on upgrading versions generally: -If you just want the executable/GUI/binary version of the code, always use -the latest version of those files (example: joinmarket-qt.exe for Windows) found -on the [releases](https://github.com/AdamISZ/joinmarket-clientserver/releases) page. - -(Note, sometimes this won't be the latest release, so you may have to scroll down -a little; not all releases, for now, will include binary builds). +If you just want the latest version in a new directory, go to the [releases](https://github.com/AdamISZ/joinmarket-clientserver/releases) page. +Binary executables are not currently being built; that may change in the future. Otherwise: if you are upgrading from an older version, just update using git: `git pull origin master`, or `git fetch; git checkout tags/` for a specific tagged release, then rerun the installation diff --git a/docs/JOINMARKET-QT-GUIDE.md b/docs/JOINMARKET-QT-GUIDE.md index 1cc4a11..b9a21ea 100644 --- a/docs/JOINMARKET-QT-GUIDE.md +++ b/docs/JOINMARKET-QT-GUIDE.md @@ -25,7 +25,8 @@ The github commits to the main repo, above, are signed. ### Walkthrough -Double click the binary to run it. +Double click the binary to run it, or go to the `/scripts` subdirectory and run `python joinmarket-qt.py` +(make sure you're in the venv, go back to the README quick install instructions if you don't know what that means). You will get the following error screen initially: @@ -40,7 +41,7 @@ has been created in the directory you're running in. If you're running Bitcoin C rpc_host = localhost #default usually correct rpc_port = 8332 # default for mainnet -If you're not using Core, you can set the value of `blockchain_source` in that section to `electrum-server`. +If you're not using Core, you can set the value of `blockchain_source` in that section to `electrum-server` **but only do this for testing; it's not supported!**. Once the rpc connection is correct (or using Electrum), you will be presented with this start screen: diff --git a/docs/TESTING.md b/docs/TESTING.md index 0a35a39..3ab761c 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -13,9 +13,10 @@ Install the test requirements (still in your virtualenv as mentioned above): Running the test suite should be done something like (advisable to wipe ~/.bitcoin/regtest first): - pytest --btcconf=/path/to/bitcoin.conf --btcroot=/path/to/bitcoin/bin/ --btcpwd=whatever --nirc=2 -k "not configure" --ignore test/test_full_coinjoin.py -p no:warnings + pytest --btcconf=/path/to/bitcoin.conf --btcroot=/path/to/bitcoin/bin/ --btcpwd=whatever --nirc=2 --ignore test/test_full_coinjoin.py -p no:warnings -(you'll first want to copy the regtest_joinmarket.cfg file from the test/ directory to the root directory, this file will need minor edits for your btc configuration). +(you'll first want to copy the regtest_joinmarket.cfg file from the test/ directory to the root directory, +this file will need minor edits for your btc configuration). ### Running tests of sendpayment and tumbler (including with malicious makers) @@ -64,4 +65,11 @@ the add-utxo tool so external commitments usage can be tested. ### Testing Joinmarket-Qt with regtest You can follow the process above using `test/ygrunner.py` to set up the environment, and then just run `python joinmarket-qt.py` from within the `scripts` directory. -Note that you can load a random/empty wallet with a 32 char hex string, or more usefully, use the provided wallet with coins in it, as described above. The 'generate' and 'recover' functions will not work on regtest for now, however; they can currently only be tested on mainnet. \ No newline at end of file +Note that you can load a random/empty wallet with a 32 char hex string, or more usefully, +use the provided wallet with coins in it, as described above. + +The 'generate' and 'recover' functions will not work like this on regtest, but you can generate a file-based wallet on regtest from the command line, +and then load it with a one line hack to the joinmarket-qt.py file (I'll let you work that out, if you got this far :) ). +You can also do full tumbler tests, on regtest, using the GUI, using this setup. Spin up ygrunner.py as described above, then start the tumbler wizard +in the 'CoinJoin' tab, and the multi- subtab, and choose Generate Tumbler Schedule. There are 3 default destination addresses provided although +you may want to change them, depending on the test. diff --git a/docs/USAGE.md b/docs/USAGE.md index 019e2e4..48cd036 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -50,7 +50,14 @@ in the previously linked page. Don't neglect the point mentioned that, if you ar If you are upgrading from non-Segwit JM, you'll want to read this [upgrade guide](SEGWIT-UPGRADE.md). -### Third step: Try out a coinjoin +### Third step (optional): Try out a coinjoin + +**Doing single coinjoins doesn't really achieve a significant privacy boost; +so you can skip this step if that's your only interest, and go to step 4b instead +to learn about the tumbler script, which we strongly recommend to achieve this goal**. + +A single coinjoin *can* make destination (payment) outputs unclear, and can degrade automated blockchain surveillance significantly. +We recommend using these opportunistically when making payments but on no account rely on any specific privacy gain from doing so. To try doing one coinjoin, use the `sendpayment.py` script. See [here](https://github.com/JoinMarket-Org/joinmarket/wiki/Sending-payments-with-CoinJoin#send-payment) @@ -62,11 +69,17 @@ To try doing one coinjoin, use the `sendpayment.py` script. See [here](https://g Read the introductory guide [here](https://github.com/JoinMarket-Org/joinmarket/wiki/Running-a-Yield-Generator). -You can use the `yield-generator-basic.py` script in the `scripts/` directory. -The new script (much simplified) has the same fields at the top you can edit; note -the new offertypes are 'swreloffer', 'swabsoffer' - they function the same, but use segwit. +You can use (recommended) the `yg-privacyenhanced.py` script in the `scripts/` directory. +You can also instead use the `yield-generator-basic.py` which is almost the same but the former has +some slight behaviour tweaks to make the privacy properties of the bot better and is more clearly documented. + +If you're new to this, note the slightly strange/surprising fact that the settings are editable in the source file; +at the top of those two script files (`yield-generator-basic.py` and `yg-privacyenhanced.py`), there is a user-editable section; +the comments tell you what to change and what it means. + +For veteran users, note the new offertypes are 'swreloffer', 'swabsoffer' - they function the same, but use segwit. -### 4b step: if you want to run the tumbler script. +### 4b step: Running the tumbler script to boost privacy of owned coins. Read the instructions [here](tumblerguide.md) \ No newline at end of file diff --git a/scripts/joinmarket-qt.py b/scripts/joinmarket-qt.py index 0f51c6e..335e5cf 100644 --- a/scripts/joinmarket-qt.py +++ b/scripts/joinmarket-qt.py @@ -58,6 +58,7 @@ qt5reactor.install() #General Joinmarket donation address; TODO donation_address = "1AZgQZWYRteh6UyF87hwuvyWj73NvWKpL" +donation_address_sw = "bc1q5x02zqj5nshw0yhx2s4tj75z6vkvuvww26jak5" #Underlying joinmarket code version (as per setup.py etc.) JM_CORE_VERSION = '0.5.3' @@ -1173,14 +1174,18 @@ class JMMainWindow(QMainWindow): str(jm_single().JM_VERSION) ), "Help us support Bitcoin fungibility -", "donate here: "])) label2 = QLabel(donation_address) - for l in [label1, label2]: + label3 = QLabel(donation_address_sw) + for l in [label1, label2, label3]: l.setTextFormat(QtCore.Qt.RichText) l.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) l.setOpenExternalLinks(True) label2.setText("" + donation_address + "") + label3.setText("" + + donation_address_sw + "") lyt.addWidget(label1) lyt.addWidget(label2) + lyt.addWidget(label3) btnbox = QDialogButtonBox(msgbox) btnbox.setStandardButtons(QDialogButtonBox.Ok) btnbox.accepted.connect(msgbox.accept)