Joinmarket-clientserver 0.3.4: ================= Minor release with improved completion rate of joins, and a few important bugfixes (removing possible crash vector for Makers). The application now also supports (old Joinmarket-style) non-segwit wallet usage (although this is not recommended), , supports the Core multiwallet feature and also rpc cookie auth. Please also note that the default fee for the yield-generators (Makers) in `script/yield-generator-basic.py` and `yg-privacyenhanced.py` are reduced by a factor of 10. Please review the fee configuration at the top of the file you're using and change the default values as you wish. Due to the DOS implications of the bugfix, upgrade immediately if you are a Maker; you may otherwise lose your connection at any time. Please report bugs using the issue tracker at github: Upgrading ========= To upgrade: run the `install.sh` script as mentioned in the README. When prompted to overwrite the directory `jmvenv`, accept. Notable changes =============== Most changes in this release are backend (many connected with testing or installation), so are not listed here. Their not being described here does not imply that they are not important, only that they won't be of interest to users. ### Restart-with-subset of honest makers `b741b24764ebb1b1e89a9f516e64a98eeda86557` The code already has a facility called "complete-with-subset" which enables a Taker to continue and complete a CoinJoin when one or more of the counterparty Makers refuses to send a valid `!ioauth` message in the first stage of negotiation. This is the relatively easier kind of DOS vector to address - since the Taker has not yet, at this stage, constructed the full CoinJoin transaction, and can therefore construct it using the utxos of the honest makers who did send valid `!ioauth`s. It is limited to only continue if the number of honest makers is at least as high as the setting `minimum_makers` in the `POLICY` section of `joinmarket.cfg`. However, a DOS-ing Maker can still refuse to send the signature (`!sig`) at the end of the negotiation. In this case the Taker must start from scratch as the currently prepared transaction is no longer valid. To aid this scenario, this commit allows the Taker to restart with *specifically that set of makers who were honest in the first attempt*. This does still cost an additional commitment (it is possible but quite a bit more complex to alter the code so that that isn't the case), but it will mean that hopefully very few transactions indeed cannot complete. Note that when using `sendpayment` this may require waiting and re-confirming the new set of fees (they will usually be the same as the first attempt, but could be different in theory). With both complete-with-subset and restart-with-subset in place, the overall completion rate should be high unless the number of malicious makers completely swamps the number of honest ones. This is applied to all Taker modes (sendpayment, tumbler and also in Qt GUI). ### Fix bug in IRC collision handling `ec60bcd14f871611459dd430550085035d750167` Previously, if a bot reconnected and encountered a nick collision, it would append '_' and connect, but counterparties would ignore appended characters after NICK_MAX_ENCODED+2, and so would send to the other nick. This happens in network connection failure scenarios. Strategy here is to simply insist on regaining the nick on that message channel where it has been lost, retrying every 10s. There is also a loud warning message printed. Bots with fairly stable connection (including Tor) probably never encountered this, but if (for example) your ISP force-disconnects, your Maker could be left essentially disconnected from the trading pit, without your knowing. This was quite a bad bug; now it will almost certainly be successful in reconnecting to the pit after some seconds or minutes, and if not it will at least print a very large warning, repeatedly. More sophisticated solutions are difficult to obtain. ### Support for Bitcoin Core multiwallet feature `91ffa6cb6c165fa26ae5e1d2881cb1c9792dd094` Adds support for use of multiple Bitcoin Core wallets, a feature introduced in Bitcoin Core 0.15.0, see [release notes](https://bitcoincore.org/en/2017/09/01/release-0.15.0/#multiwallet) for details. ### RPC credentials from cookie auth file `ea67a8bf85edd7fb6b5c5113d6485eaa42bf0129` Adds support for use of cookies as alternative to rpcuser/pass for authentication of RPC connections to Bitcoin Core. ### Support for non-segwit takers/makers. `816078b437d9a0b6d31be4d2b827582602717abc`, `4e6bee33336a0fb915a24e5626af053f4a137b66`, `619b4a123f441531dbd54d353ab64e3f771bdba1`, `966bce19a42926f74c19fe1db98ab8edc2648e03` Although as noted in the README now, this is highly dis-recommended (almost nobody is using non-segwit joinmarket anymore), there is support for backwards compatibility now, of the old-style Joinmarket wallets now (they are not BIP39 and use p2pkh addresses ("1")), and running a Taker or Maker is possible. You shoud set `segwit=false` in `joinmarket.cfg` to use this feature. ### SIGHASH_SINGLE bugfix for segwit `589ed31fde771c606488412324d0affd76e8b670` SIGHASH_SINGLE handling in the signing code for segwit was wrongly coded, this fixes it. There is no current usage of this feature in Joinmarket. ### Reduce default Maker fees `f7029f64924dc9523258b336a4499f5551f8d6cf` The **default** fees are reduced in both yield generator scripts to about 10% of what they were before, to match more what is seen in the market; see the comment at the start of these release notes for user action. Credits ======= Thanks to everyone who directly contributed to this release - - @AdamISZ - @undeath - @fivepiece - @chris-belcher - @kristapsk - @adlai - @mecampbellsoup - @jameshilliard - @AlexCato And thanks also to those who submitted bug reports, tested and otherwise helped out.