diff --git a/docs/release-notes/release-notes-0.4.0.md b/docs/release-notes/release-notes-0.4.0.md new file mode 100644 index 0000000..2ed81cc --- /dev/null +++ b/docs/release-notes/release-notes-0.4.0.md @@ -0,0 +1,190 @@ +Joinmarket-clientserver 0.4.0: +================= + + + +This is a significant upgrade, but mostly to features `behind the scenes` that should improve both the +security and the performance (in terms of coinjoin success/quality). However it is not a security critical +release, nor includes any genuinely breaking changes. See the next section, Upgrade, for more details; there +are a couple of minor things you should do when upgrading, but it shouldn't cause any real hassle. + +Please report bugs using the issue tracker at github: + + + +Upgrading +========= + +To upgrade: + +First run the `install.sh` script as mentioned in the README. When prompted to overwrite the directory `jmvenv`, accept. + +Next: there is a small but not disruptive task to do: upgrade the wallet file format. Use the instructions +[here](https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/wallet-upgrade.md) . Note this +does not require doing transactions, or rescanning Core or anything similarly disruptive; it's purely a file format change (see +"Notable Changes" (under "Upgrade of wallet ...") below for details on this wallet upgrade). +Obviously do keep a backup of the previous format, at least initially, but the new format has been quite widely tested now +and shouldn't cause issues in usage. + +Thirdly: this can be skipped for now if you don't have time, but: see +[here](https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/config-irc-update.md) +for how to change the format in the configuration +for IRC servers. It's a trivial change that just helps out in situations where one of the IRC servers is down (you can now +just comment it out, unlike before). + +Fourthly: (this can also be skipped until later) When running `sendpayment.py` or `tumbler.py` you will be prompted to choose +a specific value for the maximum coinjoin fee(s) per participant, or accept a default random value. Details on the reason +for this below in "Notable changes", under "Order chooser improvement" + + +Notable changes +=============== + +### Upgrade of wallet code and wallet file format + +INSERT SUMMARY OF FUNCTIONAL CHANGES AND REASONING HERE + +a0c1d5a add upgrade notes + +8885e61 revert bad assert fix + +a929cf3 make log output human-readable again + +aa2c1d9 fix some bugs in wallet_utils + +9dd1dc7 fix wallet sync in fast mode + +98f41f7 make SimpleLruCache an actual LRU cache + +703ae04 remove wallet.sign() + +34f8600 fix wallet syncing + +747c227 fix some max_mixdepth off-by-one errors + +39e4276 change default wallet name + +8b9abef add is_segwit_mode() utility function + +8ca6cfc make sure new addresses always get imported + +914a40e adopt wallet_utils for new wallet + +cdbb345 remove uses of internal wallet data from electruminterface. NOTE: changes untested, probably breaks electruminterface somehow + +1f30967 adopt blockchaininterface for new wallet + +705d41d remove usages of wallet.unspent + +89b5cd4 add new wallet classes to existing tests + +3cf9926 remove references to old wallet classes + +2a0757c remove BitcoinCoreWallet + +6aaabb2 change yieldgenerator using new wallet implementation, start porting wallet_utils + +995c123 replace old wallet implementation with new one + +474a77d add setup.py dependencies + +ca57a14 add new wallet implementation + +455d092 minor bugfixes to Qt for new wallet code + +fd0e5b2 Merge #181: new wallet follow-up + +3a89ee4 move wallet upgrade docs and improve wallet opening error handling + +310fac8 add test for wallet.mixdepth + +3921882 change wallet mixdepth behaviour + +d3a6dd0 fix old wallet conversion with mnemonic extension + +6a26e48 Disallow less than 1 mixdepth in changemixdepth. Maxmixdepth error msg in tumbler: fix off-by-one + +fdd0d11 Remove --rpcwallet CLI option + +a65b822 fix help msg error for changemixdepth + +8f434b5 open wallet in read-only mode if possible + +697d8d7 bugfix: sendpayment invalid reference to userpcwallet + +### Remove use of deprecated accounts feature in Core + +As of Bitcoin Core 0.17.0, the accounts feature is deprecated, and can only still be +used with the flag `--deprecatedrpc=accounts` passed to `bitcoind`. As of 0.18 it will +be removed entirely. Hence Joinmarket has switched over to using the labels feature, instead +of the accounts feature, as of this 0.4.0 release, meaning you should notice no effect when +upgrading to 0.17.0. For more details see the [PR](https://github.com/JoinMarket-Org/joinmarket-clientserver/pull/186). + +`b52bc06` Switch over to using labels instead of accounts + +### Order chooser improvement + +This is a small and probably near-invisible change, once configured, but may actually be *very* +important and so is worth understanding: + +One weakness of Joinmarket's model is that Takers are very price sensitive (using an exponential +distribution of weighting by price, by default, with the order-choose method (1) `weighted_order_choose`). +The other two non-default options were: (2) pick orders manually (great, but very fiddly/annoying) and +(3) `cheapest-order-choose`, which obviously is maximally price sensitive. + +The problem with this heavy price-sensitivity is that Sybils, i.e. attackers who want to participate +in a maximum number of joins to block them or to gain more probabilistic information, or other advantages, +can get a lot of leverage from simply offering ultra-low fees compared to the current market. But zero +fee sensitivity is also senseless, since the whole point is to have an actual market, i.e. prices must matter. + +One sensible trade-off is to have the Taker choose a maximum price they're willing to pay, but to be randomly choosing +fees within that range. And that's what the new default order-choosing mechanism (4) `random_under_max_order_choose` is +doing. You choose a maximum absolute number of satoshis per coinjoin counterparty, and a maximum relative fraction +per counterparty, and orders which violate *both* of those limits are rejected. This can be set on the command line, +as a flag, or in the `joinmarket.cfg` file. You can also override the default and go back to any of the three previously +existing order-choose algorithms. + +Note that the defaults offered to you are randomized; we don't want all Takers using the same default maximum value, since +that will lead to artificial crowding of fees near those levels; as implemented, this can't happen. + +`a2c74ee` add random-under-max order chooser + +### Various other minor fixes + +Non-developers can safely ignore these changes. The last four are modifications +to the installation scripts, in case that is relevant to your interests. + +55c51a9 Remove jmtainter script, not used or maintained currently + +03ee77b fix issues highlighted by flake8 + +9d72573 add flake8 config and enable in travis + +bdbf62b fix flake8 warning + +59a998f fix int assertions + +ebcb640 fix amount fraction comment in tumblerguide + +316f866 use libsecp256 @d333521 for secp256k1-py + +be1374c install script fixed + +a057b87 add setupall.py --all mode + +51eb77e update libsodium url and core to v0.16.3 in docker + + +Credits +======= + +Thanks to everyone who directly contributed to this release - + +- @undeath +- @fivepiece +- @AdamISZ +- @chris-belcher +- @kristapsk +- @mighty-merganser + +And thanks also to those who submitted bug reports, tested and otherwise helped out. diff --git a/jmbase/setup.py b/jmbase/setup.py index b59dcf5..232a692 100644 --- a/jmbase/setup.py +++ b/jmbase/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup(name='joinmarketbase', - version='0.3.5', + version='0.4.0', description='Joinmarket client library for Bitcoin coinjoins', url='http://github.com/Joinmarket-Org/joinmarket-clientserver/jmbase', author='', diff --git a/jmbitcoin/setup.py b/jmbitcoin/setup.py index dc7665c..f996f83 100644 --- a/jmbitcoin/setup.py +++ b/jmbitcoin/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup(name='joinmarketbitcoin', - version='0.3.5', + version='0.4.0', description='Joinmarket client library for Bitcoin coinjoins', url='http://github.com/Joinmarket-Org/joinmarket-clientserver/jmbitcoin', author='', diff --git a/jmclient/setup.py b/jmclient/setup.py index 3b2615d..4f5b625 100644 --- a/jmclient/setup.py +++ b/jmclient/setup.py @@ -2,12 +2,12 @@ from setuptools import setup setup(name='joinmarketclient', - version='0.3.5', + version='0.4.0', description='Joinmarket client library for Bitcoin coinjoins', url='http://github.com/Joinmarket-Org/joinmarket-clientserver/jmclient', author='', author_email='', license='GPL', packages=['jmclient'], - install_requires=['joinmarketbase==0.3.5', 'mnemonic', 'qt4reactor', 'argon2_cffi', 'bencoder.pyx', 'pyaes'], + install_requires=['joinmarketbase==0.4.0', 'mnemonic', 'qt4reactor', 'argon2_cffi', 'bencoder.pyx', 'pyaes'], zip_safe=False) diff --git a/jmdaemon/setup.py b/jmdaemon/setup.py index fea7938..edc5131 100644 --- a/jmdaemon/setup.py +++ b/jmdaemon/setup.py @@ -2,12 +2,12 @@ from setuptools import setup setup(name='joinmarketdaemon', - version='0.3.5', + version='0.4.0', description='Joinmarket client library for Bitcoin coinjoins', url='http://github.com/Joinmarket-Org/joinmarket-clientserver/jmdaemon', author='', author_email='', license='GPL', packages=['jmdaemon'], - install_requires=['txsocksx', 'pyopenssl', 'libnacl', 'joinmarketbase==0.3.5'], + install_requires=['txsocksx', 'pyopenssl', 'libnacl', 'joinmarketbase==0.4.0'], zip_safe=False) diff --git a/scripts/joinmarket-qt.py b/scripts/joinmarket-qt.py index f31b4c2..907049d 100644 --- a/scripts/joinmarket-qt.py +++ b/scripts/joinmarket-qt.py @@ -47,7 +47,7 @@ pyqt4reactor.install() donation_address = "1AZgQZWYRteh6UyF87hwuvyWj73NvWKpL" #Underlying joinmarket code version (as per setup.py etc.) -JM_CORE_VERSION = '0.3.5' +JM_CORE_VERSION = '0.4.0' #Version of this Qt script specifically JM_GUI_VERSION = '7'