diff --git a/docs/JOINMARKET-QT-GUIDE.md b/docs/JOINMARKET-QT-GUIDE.md index 21a916b..8a0a49c 100644 --- a/docs/JOINMARKET-QT-GUIDE.md +++ b/docs/JOINMARKET-QT-GUIDE.md @@ -27,6 +27,8 @@ The github commits to the main repo, above, are signed. ### Walkthrough +Ensure Bitcoin Core is running, and synced. (Your version of Bitcoin Core must be compiled with wallet support). + 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). @@ -43,7 +45,10 @@ has been created in your Joinmarket data directory (see [here](USAGE.md#data)). rpc_host = localhost #default usually correct rpc_port = 8332 # default for mainnet -Once the rpc connection is correct, you will be presented with this start screen: +Before restarting though, you're strongly advised to make the configuration change explained [here](USAGE.md#setting-core-wallet), this +may avoid possible RPC errors (indeed, read the whole of that section on "Configuring for Bitcoin Core"). + +Once the rpc connection is correct, and you restart, you will be presented with this start screen: ![](images/JMQInitregtest.png) @@ -74,16 +79,8 @@ stick to that convention. The wallet will now automatically load from the your Bitcoin Core node. It may take a few seconds, during which you'll see "Reading wallet from blockchain...". -If JoinMarketQt stucks in "Reading wallet from blockchain..." state, close it. -You need to create a wallet in the Bitcoin Core using the command: -```bitcoin-cli createwallet "jm_wallet"``` - -The "jm_wallet" name is just an example. You can set any name. - -After you create the wallet in the Bitcoin Core, you should set it in the `joinmarket.cfg`: -```rpc_wallet_file= jm_wallet``` - -Now you can start the JoinMarketQt, load the wallet and it should work. +If JoinMarketQt gets stuck at "Reading wallet from blockchain..." state, one possible solution may be to ensure you have set `rpc_wallet_file` correctly +as described above. You can also check the terminal you ran the `joinmarket-qt.py` script from for other error messages. Since you just created it, it will have no coins initially: diff --git a/docs/USAGE.md b/docs/USAGE.md index e41da8c..02c9837 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -11,6 +11,8 @@ followed a manual installation as per [here](INSTALL.md)). 2. [Configuring for Bitcoin Core](#configure) + a. [Setting a Core wallet (recommended)](#setting-core-wallet) + 3. [Using the wallet-tool.py script](#wallet-tool) a. [Creating a Wallet](#generate) @@ -85,6 +87,8 @@ The worst case is if you recover only from seedphrase and on a new Core instance Bitcoin Core is required to use Joinmarket; note that the node *can* be pruned. +Note that if you compile Core yourself, it must have wallet support (the default), but does not need Qt. + Configuring Joinmarket for Core no longer needs any `walletnotify` setting. In the `joinmarket.cfg` file described above, edit this section (comments omitted; do read them): @@ -97,7 +101,34 @@ In the `joinmarket.cfg` file described above, edit this section (comments omitte Note, you can also use a cookie file by setting, in this section, a variable `rpc_cookie_file` to the location of the file, as an alternative to using user/password. -If you use Bitcoin Core's multiwallet feature, you can edit the value of `rpc_wallet_file` to your chosen wallet file. Just use a new line with `rpc_wallet_file = wallet2.dat` or similar. + + +### Setting a Core wallet (recommended) + +This point often confuses people. Joinmarket has its own wallet, with encryption and storage of keys, separate to Bitcoin Core, +but it *stores addresses as watch-only in the Bitcoin Core wallet*, and the relevant rpc calls to Bitcon Core always specify the +wallet they're talking to. As a result it's strongly recommended to use this feature, as it isolates those watch-only addresses +being stored in Bitcoin Core, from any other usage you might have for that Core instance. + +If you don't do this, Joinmarket will use the default Core wallet `wallet.dat` to store these watch-only addresses in. + +With `bitcoind` running, do: + +``` +bitcoin-cli createwallet "jm_wallet" +``` + +The "jm_wallet" name is just an example. You can set any name. Alternative to this `bitcoin-cli` command: you can set a line with `wallet=..` in your +`bitcoin.conf` before starting Core (see the Bitcoin Core documentation for details). + +After you create the wallet in the Bitcoin Core, you should set it in the `joinmarket.cfg`: + +``` +[BLOCKCHAIN] +... +... +rpc_wallet_file= jm_wallet +``` Then retry the `generate` command we mentioned above; it should now not error (see [below](#generate)). @@ -207,7 +238,7 @@ Total balance: 0.00000000 ``` -The [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki) xpub keys of each external branch are shown in case that is needed. +The [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) xpub keys of each external branch are shown in case that is needed. The BIP32 derivation paths are also shown; for Joinmarket they are defined by [BIP49](https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki); for more on this see [below](#structure). **Bitcoins should be sent to empty external addresses** (sometimes known as receive addresses). You'll notice in