You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

14 KiB

Joinmarket-clientserver 0.8.3:

https://github.com/joinmarket-org/joinmarket-clientserver/releases/tag/v0.8.3

Please report bugs using the issue tracker at github:

https://github.com/joinmarket-org/joinmarket-clientserver/issues

Upgrading

To upgrade:

(If you are upgrading from a version pre-0.6.2 then please see the section "Move user data to home directory" in the 0.6.2 release notes, and follow the instructions there (except the commitmentlist file - that can actually be left alone, the previous release notes were wrong on this point).)

(If you are upgrading from a version pre-0.7.0 please read the "Upgrading" section in the 0.7.0 release notes.)

First run the install.sh script as mentioned in the README. When prompted to overwrite the directory jmvenv, accept.

Note that ./install.sh -? will show the options for installation.

Notable changes

Bugfix - avoid cases of unnecessary transaction signing failure

See PR 910. In cases where makers sent data (in the !ioauth command, that transfers the information needed to construct the coinjoin) which was not valid in some way, such as the utxo not being valid (e.g. already spent), then sometimes (depending on exact conditions), those maker utxos were left in the transaction template that the Taker constructs. This led to a condition where a transaction would simply timeout as unsigned. While this doesn't stop the tumbler from continuing (it tries again after a timeout), it is a bad outcome, not least because PoDLE commitments get used up unnecessarily; the transaction could have completed normally, using the makers with correctly verified data.

After this commit, the code has been refactored to more cleanly organize the process of (a) verify that makers' data is correct and only then (b) add the makers' utxos to the transaction template.

Coinjoins should fail to complete less often after this fix.

9b01d9a minor refactor of Taker.receive_utxos()

Darkscience Tor onion address update

The optional Tor onion address in the default config is updated from the old v2 onion to the new v3 onion address. See here. Users should take note and update this in their config files, since v2 onions are going to be deprecated shortly.

1125120 darkscience tor address v3

Bugfixes to Payjoin code

Three fixes/changes here. The first dealt with a bug in which, if the index of the change output were zero, the parameter additionalfeeoutputindex was being incorrectly ignored, preventing the possibility of subtracting the fee from the change. This happened about 50% of the time where this option was chosen and led to lower transaction fees than intended. The second was more important; when more than 1 input was provided by the sender (probably not uncommon), the rule for the placement of new input(s) from the receiver according to BIP78 was not exactly correct, this is now fixed. The third is not a bugfix, but a design choice: we feel it is better to insist that the receiver uses confirmed coins only, not unconfirmed.

15089fc Fix additionalfeeoutputindex check in BIP78

60215e1 BIP78 input ordering correct for > 2 inputs

0d21b92 Require confirmed coins to receive payjoin

Set default tx broadcast to random-peer

After PR 677 late last year, the code enabled the choice of "random-peer" or "not-self" for transaction broadcast, as well as the existing default "self" (broadcasting via your own Core node). Also note that this PR implemented a fallback to broadcast yourself, in case random-peer fails because the peer fails to broadcast (see Taker.handle_unbroadcast_transaction). This commit updates the default to random-peer, being seen as superior for privacy, since there is no drawback given the above fallback mechanism in case of any failure.

a1e9d8b Set default tx_broadcast = random-peer

New feature: enable custom change addresses

See PR 859. This enables the option of adding a custom change address in place of the normally chosen in-wallet change address, if the user chooses. This is applied both for command line sendpayment and for JoinmarketQt, and it works for direct sends (i.e. no coinjoin), also. (It doesn't work for Payjoins, however). Additionally, warning messages are given to the user, in particular for the case where they choose a custom change address that is of a different scriptPubKey type than the wallet; this can lead to undesirable scenarios for coinjoins.

ad8cd74 Enable external/custom change addresses.

b4ca42d taker: Fix change validation logic

b25d03c Fixes bug introduced in ad8cd74

2e50d03 Fix signmessage to be Electrum-compatible

Verification of message signatures against segwit addresses is not currently functional/possible in Core, and additionally the signing function used for messages in jmbitcoin, derived from coincurve, was not compatible with Electrum either. This commit uses the functionality in python-bitcointx's signmessage module, and now the wallet method signmessage creates signatures on messages against segwit addresses that are verifiable in Electrum. Note that a feature like this is useful, given compatibility with Electrum (tested as of 4.0.9), but it is somewhat of a stop-gap. See BIP 322 for how things may develop in future.

Also note that we still do not have a verify method implemented here, only a sign method.

For more details on the history of this feature, see here.

BIP78 via daemon

Although for most this is an under-the-hood change only, with no functionality altered, for a subclass of users it's important. After these changes, the Tor onion service used by the receiver, and the sender's request via the SOCKS5 proxy, happen only via the daemon package, which (for those users) can be run on a separate machine or otherwise isolated instance. This brings the BIP78 implementation in line with the standard Coinjoin implementation with respect to network connections being isolate-able.

15468cb Payjoin receiver via daemon.

b6e2576 BIP78 sender protocol via daemon

09b3fab Remove Tor config defaults request in onion setup

8b0d08d Don't request privkey for ephemeral onion from Tor

Change commitments logic to avoid using different mixdepths' utxos

See PR 840. This represents a fix to a minor hole in the privacy of takers. Before this change, takers would occasionally use utxos for PoDLE commitments that were not in the same mixdepth as their inputs for the coinjoin (first, utxos in the transaction were preferred for PoDLE creation; then, if those were not eligible, any other utxo in the wallet was tried). Where this happened, the makers who received the opening of the PoDLE commitment, which includes the utxo, may be able to correlate these utxos with those in the final coinjoin transaction which they deduced to belong to the taker, and thus make a high-likelihood correlation of utxos between different mixdepths, something that Joinmarket tries hard to avoid. To avoid this possible violation of Joinmarket's privacy model, after this change, Joinmarket will ONLY source commitments from the same mixdepth as the inputs to the Coinjoin. Takers should be aware that this may lead to more cases in which they run out of possible commitments.

40768cf Change taker's commitments logic

Change to mixdepth selection algorithm in yg-privacyenhanced.py

See PR 808. This represents a probably somewhat significant improvement in the quality of the choice of mixdepth made by the yg-privacyenhanced yieldgenerator (which should be considered default; the yield-generator-basic.py is essentially legacy at this point). In short, it makes it a priority to concentrate coins into one mixdepth (or a clump of mixdepths) where possible, and removes an inherent bias towards picking a lower mixdepth that previously existed (technically there is still a very small bias but it's not relevant).

A reminder that maker-users of the codebase can also take a look at this.

993003e Change mixdepth selection of yg-privacyenhanced

Logging changes

Some fixes/improvements in logging. We send log output to STDOUT instead of STDERR for those who find that useful; we disable colored output in case output is piped to a file (but see one point still unfinished here); we make sure invalid IRC messages show up in full in the log and also there is a slight improvement in the formatting of transaction feerates.

96c03ed Disable coloured output if stdout is not a terminal

f2362dc Log whole IRC message on "bad command"

60622ff Change log output to STDOUT from STDERR

a982ea0 Better tx feerate formatting

Bugfix to max_sweep_fee_change usage

For background, you may want to read this from the 0.8.1 release notes. The above-mentioned config setting is currently at 0.8 by default, but there was a bug in the implementation such that the calculated ratio was the reciprocal of what was intended; this error is fixed here.

An additional note: users who are more concerned with successful sweep transactions than a change in fee might be advised to bump the default from 0.8 to a much higher value like 2.0.

027e468 inverted feeratio so calculation of fee deviation works as intended

Auto-load the bitcoind wallet on startup if possible.

See PR 856. This is helpful now that the model of bitcoind RPC access to wallets has changed (note that there is no longer a "default wallet", and that wallets can be loaded dynamically). Read more about setting bitcoind RPC wallets here if this is new to you.

7f85822 Try load RPC wallet on start-up if it's not loaded

Cache RPC gettransaction results for better performance

See PR 851. This should improve the performance of the history command by caching results from the RPC call.

6f533aa Reduce number of gettransaction RPC's by caching results

More minor functional changes

ae57657 ob-watcher.py: gracefully exit on old python versions

7bfc758 Use mempoolminfee instead of minrelaytxfee as tx feerate floor

bc2d604 Prevent absurdly low minsizes in yg-pe

aab14f6 fix taker fee estimation on sweep after maker responses

1d74222 Fix year 2038 problem in fidelity bond wallets

8639a96 When selecting utxos in yg, count in that change should be above dust threshold already on the first try

43cc960 taker: Account for off-by-one errors caused by rounding

9ea0a73 Hide "Total balance" in wallet-tool when only single mixdepth is displayed

f361c98 Better handling of non-standard tx'es, less extra output for csv and other small improvements

Qt UI improvements

These are mostly fairly minor so grouped together:

2bde2f9 jm-qt: Don't annoy the user for removing an address

1c2b6cd jm-qt: Clarify error message: "0" is a valid input to numCPInput

4599bd7 Fix autofreeze warning on Qt

7949374 Clear single send form after successful send

25b2e8e Don't create logs, wallets and cmtdata subdirectories under scripts

These are almost entirely not related to user functionality, but a couple of notes:

Although df83764 is minor, it relates to an important point: we cannot support importing keys of a different scriptPubKey type (e.g. native segwit BIP84) than the wallet being imported into. Key import is not something users should generally use, but if they do, it's very important to know this limitation.

03ea5bb adds options to the run_tests.sh script.

41658aa Remove socks.py, not used

adbbb24 address complaints of flake8 in jmclient

ab43961 Add flake8 linter script

512fab7 Fix remaining flake8 errors

fde23c3 Remove unused imports

4e4b15b add tests cases for commitment sourcing

46281b5 Use python-bitcointx in fidelity bond wallet sync

392f51b Remove rand_pow_array(), it's not used anymore

c30929a Fix SNICKER client-daemon setup

eedd6e0 Ensure clients connect to correct daemon port

03ea5bb Add command line option support and verbose output option

60e2bea Move wallet_utils tests to test suite

df83764 Remove unused key-type param for importprivkey

c70f253 add test case for low feerate

79bb3ff Allow to specify all conftest.py arguments to run_tests.sh

e7027ab Change IRC ports for local tests

516e46a Additional BIP32 test vector for hardened derivation with leading zeros

fb1d6cf Remove unused function argument

Documentation updates

3edd07c Remove reused donation addresses

16294bc taker_utils: Fix typo in comment

46fe744 update payjoin comment in readme

f0cd0a9 Update SOURCING-COMMITMENTS.md

aa49169 add the community Telegram channel

b0ea821 small update to TODO list

e0cfae5 move IRC network from freenode to libera.chat (merges #884)

912b4d5 add missing whitespace to log

Credits

Thanks to everyone who directly contributed to this release -

And thanks also to those who submitted bug reports, reviewed and otherwise helped out.