10 changed files with 268 additions and 23 deletions
@ -0,0 +1,113 @@
|
||||
# UPGRADING YOUR JOINMARKET TO NATIVE SEGWIT (bech32) |
||||
|
||||
## Motivation: why? |
||||
|
||||
I guess the large majority of Joinmarket users know, but for completeness: native segwit p2wpkh is substantially (perhaps 25% on average?) cheaper than p2sh-p2wpkh which we currently use, and is rapidly becoming industry standard amongst most users wallets and other Bitcoin transaction operators, including other coinjoin systems, e.g. Wasabi - this latter point is very important in that it helps with privacy to join in with the crowd. In particular, Payjoins require both wallets to use the same scriptPubkey (or address) type. |
||||
|
||||
## Do I need to do anything at all? |
||||
|
||||
Technically, no, but realistically, yes. |
||||
|
||||
If you do nothing here's what will happen: |
||||
|
||||
### As a maker |
||||
|
||||
You can continue to run your maker bot (yield generator), serving Taker customers still using p2sh ('3') addresses with your existing wallet. The traffic on these will go down over time because (a) native segwit transactions are cheaper, and Takers bear most of that cost, and (b) the default new wallet type is now native segwit, so new entrants will be creating wallets of that type, and using the native segwit pit, and so ignoring your bots. |
||||
|
||||
### As a taker |
||||
|
||||
If you have an existing wallet and still want to do joins with it with '3' addresses, you can do so, but you must set `native=false` in `[POLICY]` section of `joinmarket.cfg` - assuming you don't have this setting already (the point here is that the *default* value of that setting has changed from `false` to `true` as of 0.8.0). If you are just using `wallet-tool` or direct-sending payments, you don't even need to make that change, but you may as well do it, for as long as you are using the old wallet type. |
||||
|
||||
## How is the orderbook changing? |
||||
|
||||
So what we sometimes call the "trading pit" is basically all the bots announcing their offers on the different IRC servers. Currently they all take the form: |
||||
|
||||
`!swreloffer blah blah` |
||||
`!swabsoffer blah blah` |
||||
|
||||
(because there are no bots left using non-segwit offers or wallets). These offers will continue for some time, but in parallel, as of v0.8.0, you will start to see bots making offers with '0' included ('0' because segwit v0, albeit this is not a scientific distinction, but it was just easiest to use a single character): |
||||
|
||||
`!sw0reloffer blah blah` |
||||
`!sw0absoffer blah blah` |
||||
|
||||
Under the hood, there will be very little difference in the way the bots behave; the set of messages they pass is almost the same (but not quite, technical details). **This set of offers is entirely distinct; we are creating new coinjoins with native coinjoin outputs only, not a mixture of native and p2sh together**. This is unfortunately necessary in order for users to be able to make reasonable assumptions about anonymity sets (i.e. mixed address types screw that up). |
||||
|
||||
## How is the wallet changing, when I make a new one? |
||||
|
||||
First, this feature has been present in Joinmarket since early 2019 (see [release notes for v0.5.1](https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/release-notes/release-notes-0.5.1.md#add-native-segwit-wallet-to-backend); it is not actually new. |
||||
Second the actual wallet type is [BIP 84](https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki), the de facto industry standard for native segwit single-key wallets, and is directly analogous to [BIP49](https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki) that we use for p2sh-p2wpkh addresses. |
||||
The seed creation and recovery are therefore unchanged: we use the same BIP39 12 word seed phrase, with optional mnemonic extension as before. What changes is the HD path (e.g. m/84'/0'/0'/0/0) and address, of course. At the bottom of this page is an example mainnet wallet-tool output for the new wallet type. |
||||
|
||||
## OK, so how do I actually migrate, i.e. move to the new wallet type and orderbook? |
||||
|
||||
* Create a new wallet: either omitting the `native=` setting or setting it to `true`, *before* you run `python wallet-tool.py generate` or 'Generate' in Qt. |
||||
* Move funds into it, like any new wallet; if you are moving from an old Joinmarket wallet to this new one, I suggest doing sweeps per-mixdepth, but (a) you can use coin-freezing to use individual coins and not connect them, if you prefer, (b) using a coinjoin on the *old* Joinmarket pit to do the transfer may not make much sense, since the output address will be 'bc1' not '3' and so the anon set effect will be lost. |
||||
|
||||
Once the funds are migrated, you can just go back to what you were doing before - except with lower fees. All pre-existing functions work the same way with these BIP84 wallets. |
||||
|
||||
##### Example output of wallet-tool display: |
||||
|
||||
``` |
||||
JM wallet |
||||
mixdepth 0 xpub6CnATD8P29cQT8q4TWBFjGeAtxzq87WsoiCdmMTxBWu9mgpW1kruDA6kHrcYPYiYbjGWnM6wrFZN18MqYgcpyRjmrfVvxVUUTaD6F3mvqM3 |
||||
external addresses m/84'/0'/0'/0 xpub6EUm47xofFfo6QY1nYq6ASX3xfbhfFqS1XqMqayNUsjzTze2sPvCHtd9MmZ258jmMq26ViDUsXjEEmUVvTNyW72P688nVHn4gHBs59oR55F |
||||
m/84'/0'/0'/0/0 bc1qfljx5g2jdgf8y6r5mx94um43vqy73uxrrfu2rc 0.00000000 new |
||||
m/84'/0'/0'/0/1 bc1qq2y0vnzdxmvelfgp9au37v4acqc9vapkpn6s0e 0.00000000 new |
||||
m/84'/0'/0'/0/2 bc1qkeaqdwn49djzwqmaqgqathd23ygq0reu9clgl2 0.00000000 new |
||||
m/84'/0'/0'/0/3 bc1qj0e2kjc2dkqn4drh4l8vdmygdp5z6mzqm84xlj 0.00000000 new |
||||
m/84'/0'/0'/0/4 bc1qwrfpc565l4n5yq073lkht62zztfjy8qck5c75r 0.00000000 new |
||||
m/84'/0'/0'/0/5 bc1q4ju2gvrqdv4epxcezydmd9jjuk7yf4l6trnmsl 0.00000000 new |
||||
Balance: 0.00000000 |
||||
internal addresses m/84'/0'/0'/1 |
||||
Balance: 0.00000000 |
||||
Balance for mixdepth 0: 0.00000000 |
||||
mixdepth 1 xpub6CnATD8P29cQWAVv5chkF9dShxFTtkp68C92d6XvWneqMpqgxd5V3kxCJkiCBGfuMvHNa8MAiJ28THMSGGaQdScJBiEdvDBUnybJz8JZUW5 |
||||
external addresses m/84'/0'/1'/0 xpub6Ebnfv1i4JTB9hR7fsTQeoFK9pTkJ1C1xUcWh63e2nfs8ECSAsMLtdGfZCogpSRBcua8q1YzPg4LtigW4mZW8kNUqGeyKfbv1FL7PYB73Bi |
||||
m/84'/0'/1'/0/0 bc1q26rwwgl72qgq2jpc8jemkv2d6chegcjldl3tmu 0.00000000 new |
||||
m/84'/0'/1'/0/1 bc1qvh5d5n84rehtjugzvckel7av2cenw4aejdv3wp 0.00000000 new |
||||
m/84'/0'/1'/0/2 bc1qhtg32hj93nvaj0j3mtmf83k7957agl30484yka 0.00000000 new |
||||
m/84'/0'/1'/0/3 bc1qq34fnkdjewvsq4ftrpgjf39724kwae7gn5fs6f 0.00000000 new |
||||
m/84'/0'/1'/0/4 bc1q8s6c25qahuzgrhd79engxgsk83ykmgxc26gwny 0.00000000 new |
||||
m/84'/0'/1'/0/5 bc1qjmd2arkjr03z70h7jeueg8yq84c4c0ae8mlgcq 0.00000000 new |
||||
Balance: 0.00000000 |
||||
internal addresses m/84'/0'/1'/1 |
||||
Balance: 0.00000000 |
||||
Balance for mixdepth 1: 0.00000000 |
||||
mixdepth 2 xpub6CnATD8P29cQYCTdfy2CyXGTYssFdZ3Ah3pkSyQbeBLTHbBzFwa1t6nbdHWGswECMhzeYDrkfd2TBZbAdiMcsXqSUqfPfh3B2zAuv8cS4RJ |
||||
external addresses m/84'/0'/2'/0 xpub6Dax3dojj4m54pE9CgTm3mEuXxEG6wu1yv4qoJcBng7ip7UKJqmfphXKySjkiDaX8tRFdPc7uNbrZuteHJxxRtQcCJw9gG2hnwALAJJwuHH |
||||
m/84'/0'/2'/0/0 bc1qsjq3fqlhpvl6zdlx4keaptqvnsvlq9wvs6htnp 0.00000000 new |
||||
m/84'/0'/2'/0/1 bc1qfhwq2nl3s3wvd87ecs7n5y4eg48wggumznx8gv 0.00000000 new |
||||
m/84'/0'/2'/0/2 bc1qcp8ksz9jlkeltkuvxqypmkd92jtdsw8z6v9zuz 0.00000000 new |
||||
m/84'/0'/2'/0/3 bc1q7mnglcgdcshnuc9p0s50slr98ysmur8qvqzlc9 0.00000000 new |
||||
m/84'/0'/2'/0/4 bc1qk9ewvfet6a2cw2rzykwz2q96ue8amras4j9676 0.00000000 new |
||||
m/84'/0'/2'/0/5 bc1qatmlhx4zphrsh3p97c2kvhmze8k556592pl6wx 0.00000000 new |
||||
Balance: 0.00000000 |
||||
internal addresses m/84'/0'/2'/1 |
||||
Balance: 0.00000000 |
||||
Balance for mixdepth 2: 0.00000000 |
||||
mixdepth 3 xpub6CnATD8P29cQcqg9mDxc2pRMT5syBfLsVMJdJ2QbvpV52VHbBrjRpYgwg9rtAVRYuWnDGdk9T2ZXhD9XhbTnZnd5k8QxPXKXFwXKCGDNAM4 |
||||
external addresses m/84'/0'/3'/0 xpub6FAfwaxVRmjFadt3hmR9dnALSCQ6Gs3ZzfLVodLnkyBVNhpeZaUD2ePWCqYdmsPbW8XcvTB3ZoW2wWXBhAsNNPbyFrJevnuisBG1XhLbRpU |
||||
m/84'/0'/3'/0/0 bc1qnvc2v6y5xp00ps7c7xe7762d033hfeunu93txk 0.00000000 new |
||||
m/84'/0'/3'/0/1 bc1q4tcwnjp4afywkknr3vnsfnfkancdgtty9wpduw 0.00000000 new |
||||
m/84'/0'/3'/0/2 bc1qtwgfxgjuh2qt5mss0yu4f8gtfyl6qx40et00s0 0.00000000 new |
||||
m/84'/0'/3'/0/3 bc1q6dqwcztdxd8j0t4md8knrs9mj2tn5pyxjlv6gw 0.00000000 new |
||||
m/84'/0'/3'/0/4 bc1qwsf8jtu3rcvhfr2z9qm5umwz75q88pp3wsclu8 0.00000000 new |
||||
m/84'/0'/3'/0/5 bc1q669ss06j9c7ycf5jdg7zf8ctxa4yudn4tyug2y 0.00000000 new |
||||
Balance: 0.00000000 |
||||
internal addresses m/84'/0'/3'/1 |
||||
Balance: 0.00000000 |
||||
Balance for mixdepth 3: 0.00000000 |
||||
mixdepth 4 xpub6CnATD8P29cQemJKvXNbkw7VhmezjUJAzTan2TsRKCai4ssTVWdghHNa9TaSggZtctToaewCA1KzBA8zdbx3ZCc8ez3cJQxAx96HhgABx6i |
||||
external addresses m/84'/0'/4'/0 xpub6ExY4c7otX7GvGHuL4NZpoLhxzfEkyiKngcmqeYnNQpiwBpPmEgDWAqr5qu7dPUTwHNsjUyWPrBJo9e9MNPsonnfxc4fnT2XtgBMDwN8T5h |
||||
m/84'/0'/4'/0/0 bc1q8xvvyzty8ejy6epywekjzakkt7nutxxmvq0u9w 0.00000000 new |
||||
m/84'/0'/4'/0/1 bc1q9mn6e64zmuzccqa4xeh80zm2nqqmylpa8w7ndj 0.00000000 new |
||||
m/84'/0'/4'/0/2 bc1qrgstfgjzmrvwcv6v05ugl28ss46qywk92ksn30 0.00000000 new |
||||
m/84'/0'/4'/0/3 bc1qc06d3xdfj5lq8slezk2sl8krrr08qzku07gewr 0.00000000 new |
||||
m/84'/0'/4'/0/4 bc1qz0tfa6e9yqzxqzlj56ge24t7z7rftj9janpsed 0.00000000 new |
||||
m/84'/0'/4'/0/5 bc1q2utkj2rqqw4wdr7z2fu9cgfv5zdpsnt47uns6u 0.00000000 new |
||||
Balance: 0.00000000 |
||||
internal addresses m/84'/0'/4'/1 |
||||
Balance: 0.00000000 |
||||
Balance for mixdepth 4: 0.00000000 |
||||
Total balance: 0.00000000 |
||||
``` |
||||
@ -0,0 +1,111 @@
|
||||
Joinmarket-clientserver 0.8.0: |
||||
================= |
||||
|
||||
<https://github.com/joinmarket-org/joinmarket-clientserver/releases/tag/v0.8.0> |
||||
|
||||
This is a major upgrade release, in one specific sense: the native segwit orderbook is now available, and wallets, by default, are created native segwit (bech32, i.e. addresses starting with bc1 on mainnet). Please read "Native segwit (bech32) order book" below for details. |
||||
|
||||
There are also several minor bugfixes. |
||||
|
||||
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](https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/release-notes/release-notes-0.6.2.md), 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](https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/release-notes/release-notes-0.7.0.md).) |
||||
|
||||
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 |
||||
=============== |
||||
|
||||
### Native segwit (bech32) order book |
||||
|
||||
See the [native segwit upgrade guide](../NATIVE-SEGWIT-UPGRADE.md) for details. From this release, new wallets will be created as native segwit by default. This setting can be changed by setting `native=false` in the `[POLICY]` section of `joinmarket.cfg`. |
||||
|
||||
*Note that native segwit wallets are not a new feature: we have had them since [version 0.5.1](https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/release-notes/release-notes-0.5.1.md#add-native-segwit-wallet-to-backend) and they have been used for payjoin experimentation*, what is new is only the default, and the use in Joinmarket coinjoins. |
||||
|
||||
If you create wallets, and run Takers and Makers with the default settings, you will be using only native segwit for your coinjoins and other transactions, and will only join with other participants using native segwit. Note that everything about pre-existing p2sh coinjoins and transactions still works as before, if you disable as per the above `native=false`. |
||||
|
||||
`ab87db2` Create native segwit v0 order type |
||||
|
||||
`2ae348b` Update signature exchange and verification for bech32 |
||||
|
||||
`3c96d41` Several tweaks for bech32 orderbook, plus docs |
||||
|
||||
`ebd54d6` Bugfix: yg-privacyenhanced non-integer fees |
||||
|
||||
`3537b70` Update transaction parameters |
||||
|
||||
`9e66bc5` Update ob-watcher |
||||
|
||||
`f69cb37` Choose maker offers based only on our wallet type |
||||
|
||||
#### Bugfix: correct minsize calculation for yield generators with reloffers, and txfee contribution |
||||
|
||||
A bug in the calculation of yield generator minsize, for reloffers, was previously not resetting it to a higher value to account for the txfee contribution; this is fixed. A consequence of this: default txfee contribution value is changed from 100 to 0, to avoid confusing yield generator users who might not understand the reason their number of coins is insufficient (it is a function of both the relative fee setting and the txfee contribution setting, to ensure that the profit is always at least 20% of the latter). The complexity of this should probably be removed in future updates to the protocol. |
||||
|
||||
`dcfc610` Bugfix: allow minsize dynamic update |
||||
|
||||
`d1ae07d` set default txfee contrib to zero, improve error message |
||||
|
||||
#### Don't fail on whitespace in recovery seed entry |
||||
|
||||
In entering recovery seed phrases on Qt and command line, we now ensure that white space is always stripped appropriately; prior to this fix, unexpected failures could occur due to whitespace being interpreted as a word in the seed phrase. |
||||
|
||||
`29b274e` Strip whitespace from beginning and end of mnemonic on wallet recovery |
||||
|
||||
`5f07872` allow multiple whitespace in mnemonic entry |
||||
|
||||
#### Make libsecp256k1 tests optional in installation script |
||||
|
||||
This option is enabled with the `--disable-secp-check` parameter of `install.sh`, and is useful for people on more constrained devices who want to speed up installation. |
||||
|
||||
`aa3cec4` Make libsecp256k1 tests optional |
||||
|
||||
#### Update commitments utilities scripts |
||||
|
||||
These fairly minor scripts needed to be updated for the new bitcoin backend, and bech32 wallets. |
||||
|
||||
`cc78dae` Update commitments utility scripts |
||||
|
||||
##### Various improvements and bugfixes |
||||
|
||||
`d5cf387` Get rid of remaining direct rpc() calls outside blockchaininterface.py |
||||
|
||||
`f314333` Add commitmentlist from rootdir to gitignore |
||||
|
||||
`6aa300a` (pr_728) Fix relunit selector |
||||
|
||||
`6300eda` Re-introduce pillow dependency, seems to be need by qrcode itself. |
||||
|
||||
`44c9dcd` (pr_726) Remove twisted logging on testnet |
||||
|
||||
`394e672` Add link to orderbook.md |
||||
|
||||
`29458f8` Remove dead code |
||||
|
||||
`1b6beda` Remove /shutdown from ob-watcher |
||||
|
||||
|
||||
Credits |
||||
======= |
||||
|
||||
Thanks to everyone who directly contributed to this release - |
||||
|
||||
- @jules23 |
||||
- @kristapsk |
||||
- @PulpCattel |
||||
- @nixbitcoin |
||||
- @AdamISZ |
||||
|
||||
|
||||
And thanks also to those who submitted bug reports, tested (especially bech32 testing!), reviewed and otherwise helped out. |
||||
Loading…
Reference in new issue