aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/JSON-RPC-interface.md11
-rw-r--r--doc/REST-interface.md12
-rw-r--r--doc/bips.md1
-rw-r--r--doc/build-freebsd.md112
-rw-r--r--doc/build-openbsd.md1
-rw-r--r--doc/build-osx.md33
-rw-r--r--doc/build-unix.md4
-rw-r--r--doc/dependencies.md12
-rw-r--r--doc/descriptors.md2
-rw-r--r--doc/developer-notes.md27
-rw-r--r--doc/files.md37
-rw-r--r--doc/fuzzing.md10
-rw-r--r--doc/man/bitcoin-cli.1116
-rw-r--r--doc/man/bitcoin-qt.1611
-rw-r--r--doc/man/bitcoin-tx.1117
-rw-r--r--doc/man/bitcoin-wallet.164
-rw-r--r--doc/man/bitcoind.1584
-rw-r--r--doc/release-notes-19776.md9
-rw-r--r--doc/release-notes-19988.md9
-rw-r--r--doc/release-notes.md379
-rw-r--r--doc/release-process.md18
-rw-r--r--doc/shared-libraries.md3
-rw-r--r--doc/tor.md7
23 files changed, 253 insertions, 1926 deletions
diff --git a/doc/JSON-RPC-interface.md b/doc/JSON-RPC-interface.md
index 40d8e330e2..c66e79af71 100644
--- a/doc/JSON-RPC-interface.md
+++ b/doc/JSON-RPC-interface.md
@@ -127,3 +127,14 @@ However, the wallet may not be up-to-date with the current state of the mempool
or the state of the mempool by an RPC that returned before this RPC. For
example, a wallet transaction that was BIP-125-replaced in the mempool prior to
this RPC may not yet be reflected as such in this RPC response.
+
+## Limitations
+
+There is a known issue in the JSON-RPC interface that can cause a node to crash if
+too many http connections are being opened at the same time because the system runs
+out of available file descriptors. To prevent this from happening you might
+want to increase the number of maximum allowed file descriptors in your system
+and try to prevent opening too many connections to your JSON-RPC interface at the
+same time if this is under your control. It is hard to give general advice
+since this depends on your system but if you make several hundred requests at
+once you are definitely at risk of encountering this issue.
diff --git a/doc/REST-interface.md b/doc/REST-interface.md
index 842a3964df..3b127703b7 100644
--- a/doc/REST-interface.md
+++ b/doc/REST-interface.md
@@ -12,6 +12,18 @@ REST Interface consistency guarantees
The [same guarantees as for the RPC Interface](/doc/JSON-RPC-interface.md#rpc-consistency-guarantees)
apply.
+Limitations
+-----------
+
+There is a known issue in the REST interface that can cause a node to crash if
+too many http connections are being opened at the same time because the system runs
+out of available file descriptors. To prevent this from happening you might
+want to increase the number of maximum allowed file descriptors in your system
+and try to prevent opening too many connections to your rest interface at the
+same time if this is under your control. It is hard to give general advice
+since this depends on your system but if you make several hundred requests at
+once you are definitely at risk of encountering this issue.
+
Supported API
-------------
diff --git a/doc/bips.md b/doc/bips.md
index ad6f7a0767..8c20533c9b 100644
--- a/doc/bips.md
+++ b/doc/bips.md
@@ -45,3 +45,4 @@ BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.21.0**):
* [`BIP 176`](https://github.com/bitcoin/bips/blob/master/bip-0176.mediawiki): Bits Denomination [QT only] is supported as of **v0.16.0** ([PR 12035](https://github.com/bitcoin/bitcoin/pull/12035)).
* [`BIP 325`](https://github.com/bitcoin/bips/blob/master/bip-0325.mediawiki): Signet test network is supported as of **v0.21.0** ([PR 18267](https://github.com/bitcoin/bitcoin/pull/18267)).
* [`BIP 339`](https://github.com/bitcoin/bips/blob/master/bip-0339.mediawiki): Relay of transactions by wtxid is supported as of **v0.21.0** ([PR 18044](https://github.com/bitcoin/bitcoin/pull/18044)).
+* [`BIP 340`](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki) [`341`](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki) [`342`](https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki): Validation rules for Taproot (including Schnorr signatures and Tapscript leaves) are implemented as of **v0.21.0** ([PR 19953](https://github.com/bitcoin/bitcoin/pull/19953)), without mainnet activation.
diff --git a/doc/build-freebsd.md b/doc/build-freebsd.md
index f48855a344..18ea84c579 100644
--- a/doc/build-freebsd.md
+++ b/doc/build-freebsd.md
@@ -1,59 +1,127 @@
-FreeBSD build guide
-======================
-(updated for FreeBSD 12.0)
+# FreeBSD Build Guide
-This guide describes how to build bitcoind and command-line utilities on FreeBSD.
+**Updated for FreeBSD [12.2](https://www.freebsd.org/releases/12.2R/announce.html)**
-This guide does not contain instructions for building the GUI.
+This guide describes how to build bitcoind, command-line utilities, and GUI on FreeBSD.
+
+## Dependencies
+
+The following dependencies are **required**:
+
+ Library | Purpose | Description
+ ----------------------------------------------------------------------|------------|----------------------
+ [autoconf](https://svnweb.freebsd.org/ports/head/devel/autoconf/) | Build | Automatically configure software source code
+ [automake](https://svnweb.freebsd.org/ports/head/devel/automake/) | Build | Generate makefile (requires autoconf)
+ [libtool](https://svnweb.freebsd.org/ports/head/devel/libtool/) | Build | Shared library support
+ [pkgconf](https://svnweb.freebsd.org/ports/head/devel/pkgconf/) | Build | Configure compiler and linker flags
+ [git](https://svnweb.freebsd.org/ports/head/devel/git/) | Clone | Version control system
+ [gmake](https://svnweb.freebsd.org/ports/head/devel/gmake/) | Compile | Generate executables
+ [boost-libs](https://svnweb.freebsd.org/ports/head/devel/boost-libs/) | Utility | Library for threading, data structures, etc
+ [libevent](https://svnweb.freebsd.org/ports/head/devel/libevent/) | Networking | OS independent asynchronous networking
+
+
+The following dependencies are **optional**:
+
+ Library | Purpose | Description
+ ---------------------------------------------------------------------------|------------------|----------------------
+ [db5](https://svnweb.freebsd.org/ports/head/databases/db5/) | Berkeley DB | Wallet storage (only needed when wallet enabled)
+ [qt5](https://svnweb.freebsd.org/ports/head/devel/qt5/) | GUI | GUI toolkit (only needed when GUI enabled)
+ [libqrencode](https://svnweb.freebsd.org/ports/head/graphics/libqrencode/) | QR codes in GUI | Generating QR codes (only needed when GUI enabled)
+ [libzmq4](https://svnweb.freebsd.org/ports/head/net/libzmq4/) | ZMQ notification | Allows generating ZMQ notifications (requires ZMQ version >= 4.0.0)
+ [sqlite3](https://svnweb.freebsd.org/ports/head/databases/sqlite3/) | SQLite DB | Wallet storage (only needed when wallet enabled)
+ [python3](https://svnweb.freebsd.org/ports/head/lang/python3/) | Testing | Python Interpreter (only needed when running the test suite)
+
+ See [dependencies.md](dependencies.md) for a complete overview.
## Preparation
-You will need the following dependencies, which can be installed as root via pkg:
+### 1. Install Required Dependencies
+Install the required dependencies the usual way you [install software on FreeBSD](https://www.freebsd.org/doc/en/books/handbook/ports.html) - either with `pkg` or via the Ports collection. The example commands below use `pkg` which is usually run as `root` or via `sudo`. If you want to use `sudo`, and you haven't set it up: [use this guide](http://www.freebsdwiki.net/index.php/Sudo%2C_configuring) to setup `sudo` access on FreeBSD.
```bash
pkg install autoconf automake boost-libs git gmake libevent libtool pkgconf
+```
+
+### 2. Clone Bitcoin Repo
+Now that `git` and all the required dependencies are installed, let's clone the Bitcoin Core repository to a directory. All build scripts and commands will run from this directory.
+``` bash
git clone https://github.com/bitcoin/bitcoin.git
```
-In order to run the test suite (recommended), you will need to have Python 3 installed:
+### 3. Install Optional Dependencies
+
+#### Wallet Dependencies
+It is not necessary to build wallet functionality to run bitcoind or the GUI. To enable legacy wallets, you must install `db5`. To enable [descriptor wallets](https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md), `sqlite3` is required. Skip `db5` if you intend to *exclusively* use descriptor wallets
+
+###### Legacy Wallet Support
+`db5` is required to enable support for legacy wallets. Skip if you don't intend to use legacy wallets
```bash
-pkg install python3
+pkg install db5
```
-See [dependencies.md](dependencies.md) for a complete overview.
+###### Descriptor Wallet Support
-### Building BerkeleyDB
+`sqlite3` is required to enable support for descriptor wallets. Skip if you don't intend to use descriptor wallets.
+``` bash
+pkg install sqlite3
+```
+---
-BerkeleyDB is only necessary for the wallet functionality. To skip this, pass
-`--disable-wallet` to `./configure` and skip to the next section.
+#### GUI Dependencies
+###### Qt5
+Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compile the GUI, we need to install `qt5`. Skip if you don't intend to use the GUI.
```bash
-./contrib/install_db4.sh `pwd`
-export BDB_PREFIX="$PWD/db4"
+pkg install qt5
```
+###### libqrencode
+
+The GUI can encode addresses in a QR Code. To build in QR support for the GUI, install `libqrencode`. Skip if not using the GUI or don't want QR code functionality.
+```bash
+pkg install libqrencode
+```
+---
+
+#### Test Suite Dependencies
+There is an included test suite that is useful for testing code changes when developing.
+To run the test suite (recommended), you will need to have Python 3 installed:
+
+```bash
+pkg install python3
+```
+---
## Building Bitcoin Core
-**Important**: Use `gmake` (the non-GNU `make` will exit with an error).
+### 1. Configuration
-With wallet:
+There are many ways to configure Bitcoin Core, here are a few common examples:
+##### Wallet (BDB + SQlite) Support, No GUI:
+This explicitly enables legacy wallet support and disables the GUI. If `sqlite3` is installed, then descriptor wallet support will be built.
```bash
./autogen.sh
-./configure --with-gui=no \
- BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" \
- BDB_CFLAGS="-I${BDB_PREFIX}/include" \
+./configure --with-gui=no --with-incompatible-bdb \
+ BDB_LIBS="-ldb_cxx-5" \
+ BDB_CFLAGS="-I/usr/local/include/db5" \
MAKE=gmake
```
-Without wallet:
+##### Wallet (only SQlite) and GUI Support:
+This explicitly enables the GUI and disables legacy wallet support. If `qt5` is not installed, this will throw an error. If `sqlite3` is installed then descriptor wallet functionality will be built. If `sqlite3` is not installed, then wallet functionality will be disabled.
```bash
./autogen.sh
-./configure --with-gui=no --disable-wallet MAKE=gmake
+./configure --without-bdb --with-gui=yes MAKE=gmake
+```
+##### No Wallet or GUI
+``` bash
+./autogen.sh
+./configure --without-wallet --with-gui=no MAKE=gmake
```
-followed by:
+### 2. Compile
+**Important**: Use `gmake` (the non-GNU `make` will exit with an error).
```bash
gmake # use -jX here for parallelism
diff --git a/doc/build-openbsd.md b/doc/build-openbsd.md
index 2b051c078c..dccd7b1335 100644
--- a/doc/build-openbsd.md
+++ b/doc/build-openbsd.md
@@ -15,6 +15,7 @@ pkg_add qt5 # (optional for enabling the GUI)
pkg_add autoconf # (select highest version, e.g. 2.69)
pkg_add automake # (select highest version, e.g. 1.16)
pkg_add python # (select highest version, e.g. 3.8)
+pkg_add bash
git clone https://github.com/bitcoin/bitcoin.git
```
diff --git a/doc/build-osx.md b/doc/build-osx.md
index 2a7d71eea6..c1d101fde1 100644
--- a/doc/build-osx.md
+++ b/doc/build-osx.md
@@ -19,7 +19,7 @@ Then install [Homebrew](https://brew.sh).
## Dependencies
```shell
-brew install automake berkeley-db4 libtool boost miniupnpc pkg-config python qt libevent qrencode sqlite
+brew install automake libtool boost miniupnpc pkg-config python qt libevent qrencode
```
If you run into issues, check [Homebrew's troubleshooting page](https://docs.brew.sh/Troubleshooting).
@@ -30,7 +30,22 @@ If you want to build the disk image with `make deploy` (.dmg / optional), you ne
brew install librsvg
```
-## Berkeley DB
+The wallet support requires one or both of the dependencies ([*SQLite*](#sqlite) and [*Berkeley DB*](#berkeley-db)) in the sections below.
+To build Bitcoin Core without wallet, see [*Disable-wallet mode*](#disable-wallet-mode).
+
+#### SQLite
+
+Usually, macOS installation already has a suitable SQLite installation.
+Also, the Homebrew package could be installed:
+
+```shell
+brew install sqlite
+```
+
+In that case the Homebrew package will prevail.
+
+#### Berkeley DB
+
It is recommended to use Berkeley DB 4.8. If you have to build it yourself,
you can use [this](/contrib/install_db4.sh) script to install it
like so:
@@ -41,7 +56,11 @@ like so:
from the root of the repository.
-**Note**: You only need Berkeley DB if the wallet is enabled (see [*Disable-wallet mode*](/doc/build-osx.md#disable-wallet-mode)).
+Also, the Homebrew package could be installed:
+
+```shell
+brew install berkeley-db4
+```
## Build Bitcoin Core
@@ -72,14 +91,14 @@ from the root of the repository.
make deploy
```
-## `disable-wallet` mode
+## Disable-wallet mode
When the intention is to run only a P2P node without a wallet, Bitcoin Core may be
-compiled in `disable-wallet` mode with:
+compiled in disable-wallet mode with:
```shell
./configure --disable-wallet
```
-In this case there is no dependency on Berkeley DB 4.8 and SQLite.
+In this case there is no dependency on [*Berkeley DB*](#berkeley-db) and [*SQLite*](#sqlite).
Mining is also possible in disable-wallet mode using the `getblocktemplate` RPC call.
@@ -111,6 +130,6 @@ tail -f $HOME/Library/Application\ Support/Bitcoin/debug.log
```
## Notes
-* Tested on OS X 10.12 Sierra through macOS 10.15 Catalina on 64-bit Intel
+* Tested on OS X 10.14 Mojave through macOS 11 Big Sur on 64-bit Intel
processors only.
* Building with downloaded Qt binaries is not officially supported. See the notes in [#7714](https://github.com/bitcoin/bitcoin/issues/7714).
diff --git a/doc/build-unix.md b/doc/build-unix.md
index c076fb6fff..cfe3328b45 100644
--- a/doc/build-unix.md
+++ b/doc/build-unix.md
@@ -41,12 +41,12 @@ Optional dependencies:
Library | Purpose | Description
------------|------------------|----------------------
miniupnpc | UPnP Support | Firewall-jumping support
- libdb4.8 | Berkeley DB | Wallet storage (only needed when wallet enabled)
+ libdb4.8 | Berkeley DB | Optional, wallet storage (only needed when wallet enabled)
qt | GUI | GUI toolkit (only needed when GUI enabled)
libqrencode | QR codes in GUI | Optional for generating QR codes (only needed when GUI enabled)
univalue | Utility | JSON parsing and encoding (bundled version will be used unless --with-system-univalue passed to configure)
libzmq3 | ZMQ notification | Optional, allows generating ZMQ notifications (requires ZMQ version >= 4.0.0)
- sqlite3 | SQLite DB | Wallet storage (only needed when wallet enabled)
+ sqlite3 | SQLite DB | Optional, wallet storage (only needed when wallet enabled)
For the versions used, see [dependencies.md](dependencies.md)
diff --git a/doc/dependencies.md b/doc/dependencies.md
index ddd50ef296..76e8910871 100644
--- a/doc/dependencies.md
+++ b/doc/dependencies.md
@@ -6,19 +6,19 @@ These are the dependencies currently used by Bitcoin Core. You can find instruct
| Dependency | Version used | Minimum required | CVEs | Shared | [Bundled Qt library](https://doc.qt.io/qt-5/configure-options.html#third-party-libraries) |
| --- | --- | --- | --- | --- | --- |
| Berkeley DB | [4.8.30](https://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html) | 4.8.x | No | | |
-| Boost | [1.70.0](https://www.boost.org/users/download/) | [1.58.0](https://github.com/bitcoin/bitcoin/pull/19667) | No | | |
-| Clang | | [3.3+](https://releases.llvm.org/download.html) (C++11 support) | | | |
+| Boost | [1.71.0](https://www.boost.org/users/download/) | [1.58.0](https://github.com/bitcoin/bitcoin/pull/19667) | No | | |
+| Clang | | [5.0+](https://releases.llvm.org/download.html) (C++17 support) | | | |
| Expat | [2.2.7](https://libexpat.github.io/) | | No | Yes | |
| fontconfig | [2.12.1](https://www.freedesktop.org/software/fontconfig/release/) | | No | Yes | |
| FreeType | [2.7.1](https://download.savannah.gnu.org/releases/freetype) | | No | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk) (Android only) |
-| GCC | | [4.8+](https://gcc.gnu.org/) (C++11 support) | | | |
+| GCC | | [7+](https://gcc.gnu.org/) (C++17 support) | | | |
| HarfBuzz-NG | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk) |
| libevent | [2.1.11-stable](https://github.com/libevent/libevent/releases) | [2.0.21](https://github.com/bitcoin/bitcoin/pull/18676) | No | | |
| libpng | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk) |
| librsvg | | | | | |
| MiniUPnPc | [2.0.20180203](https://miniupnp.tuxfamily.org/files) | | No | | |
| PCRE | | | | | [Yes](https://github.com/bitcoin/bitcoin/blob/master/depends/packages/qt.mk) |
-| Python (tests) | | [3.5](https://www.python.org/downloads) | | | |
+| Python (tests) | | [3.6](https://www.python.org/downloads) | | | |
| qrencode | [3.4.4](https://fukuchi.org/works/qrencode) | | No | | |
| Qt | [5.9.8](https://download.qt.io/official_releases/qt/) | [5.5.1](https://github.com/bitcoin/bitcoin/issues/13478) | No | | |
| SQLite | [3.32.1](https://sqlite.org/download.html) | [3.7.17](https://github.com/bitcoin/bitcoin/pull/19077) | | | |
@@ -33,8 +33,8 @@ Some dependencies are not needed in all configurations. The following are some f
#### Options passed to `./configure`
* MiniUPnPc is not needed with `--with-miniupnpc=no`.
-* Berkeley DB is not needed with `--disable-wallet`.
-* SQLite is not needed with `--disable-wallet`.
+* Berkeley DB is not needed with `--disable-wallet` or `--without-bdb`.
+* SQLite is not needed with `--disable-wallet` or `--without-sqlite`.
* Qt is not needed with `--without-gui`.
* If the qrencode dependency is absent, QR support won't be added. To force an error when that happens, pass `--with-qrencode`.
* ZeroMQ is needed only with the `--with-zmq` option.
diff --git a/doc/descriptors.md b/doc/descriptors.md
index 181ff77e50..63acb9167f 100644
--- a/doc/descriptors.md
+++ b/doc/descriptors.md
@@ -50,7 +50,7 @@ Output descriptors currently support:
- `wsh(multi(2,03a0434d9e47f3c86235477c7b1ae6ae5d3442d49b1943c2b752a68e2a47e247c7,03774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb,03d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a))` describes a P2WSH *2-of-3* multisig output with keys in the specified order.
- `sh(wsh(multi(1,03f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8,03499fdf9e895e719cfd64e67f07d38e3226aa7b63678949e6e49b241a60e823e4,02d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e)))` describes a P2SH-P2WSH *1-of-3* multisig output with keys in the specified order.
- `pk(xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8)` describes a P2PK output with the public key of the specified xpub.
-- `pkh(xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw/1'/2)` describes a P2PKH output with child key *1'/2* of the specified xpub.
+- `pkh(xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw/1/2)` describes a P2PKH output with child key *1/2* of the specified xpub.
- `pkh([d34db33f/44'/0'/0']xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL/1/*)` describes a set of P2PKH outputs, but additionally specifies that the specified xpub is a child of a master with fingerprint `d34db33f`, and derived using path `44'/0'/0'`.
- `wsh(multi(1,xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/1/0/*,xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH/0/0/*))` describes a set of *1-of-2* P2WSH multisig outputs where the first multisig key is the *1/0/`i`* child of the first specified xpub and the second multisig key is the *0/0/`i`* child of the second specified xpub, and `i` is any number in a configurable range (`0-1000` by default).
- `wsh(sortedmulti(1,xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/1/0/*,xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH/0/0/*))` describes a set of *1-of-2* P2WSH multisig outputs where one multisig key is the *1/0/`i`* child of the first specified xpub and the other multisig key is the *0/0/`i`* child of the second specified xpub, and `i` is any number in a configurable range (`0-1000` by default). The order of public keys in the resulting witnessScripts is determined by the lexicographic order of the public keys at that index.
diff --git a/doc/developer-notes.md b/doc/developer-notes.md
index fa188dbcd6..9cb416bb30 100644
--- a/doc/developer-notes.md
+++ b/doc/developer-notes.md
@@ -276,6 +276,33 @@ configure option adds `-DDEBUG_LOCKORDER` to the compiler flags. This inserts
run-time checks to keep track of which locks are held and adds warnings to the
`debug.log` file if inconsistencies are detected.
+### Assertions and Checks
+
+The util file `src/util/check.h` offers helpers to protect against coding and
+internal logic bugs. They must never be used to validate user, network or any
+other input.
+
+* `assert` or `Assert` should be used to document assumptions when any
+ violation would mean that it is not safe to continue program execution. The
+ code is always compiled with assertions enabled.
+ - For example, a nullptr dereference or any other logic bug in validation
+ code means the program code is faulty and must terminate immediately.
+* `CHECK_NONFATAL` should be used for recoverable internal logic bugs. On
+ failure, it will throw an exception, which can be caught to recover from the
+ error.
+ - For example, a nullptr dereference or any other logic bug in RPC code
+ means that the RPC code is faulty and can not be executed. However, the
+ logic bug can be shown to the user and the program can continue to run.
+* `Assume` should be used to document assumptions when program execution can
+ safely continue even if the assumption is violated. In debug builds it
+ behaves like `Assert`/`assert` to notify developers and testers about
+ nonfatal errors. In production it doesn't warn or log anything, though the
+ expression is always evaluated.
+ - For example it can be assumed that a variable is only initialized once,
+ but a failed assumption does not result in a fatal bug. A failed
+ assumption may or may not result in a slightly degraded user experience,
+ but it is safe to continue program execution.
+
### Valgrind suppressions file
Valgrind is a programming tool for memory debugging, memory leak detection, and
diff --git a/doc/files.md b/doc/files.md
index e3f195de43..545e8fc92c 100644
--- a/doc/files.md
+++ b/doc/files.md
@@ -8,6 +8,10 @@
- [Multi-wallet environment](#multi-wallet-environment)
+ - [Berkeley DB database based wallets](#berkeley-db-database-based-wallets)
+
+ - [SQLite database based wallets](#sqlite-database-based-wallets)
+
- [GUI settings](#gui-settings)
- [Legacy subdirectories and files](#legacy-subdirectories-and-files)
@@ -50,6 +54,7 @@ Subdirectory | File(s) | Description
`indexes/blockfilter/basic/db/` | LevelDB database | Blockfilter index LevelDB database for the basic filtertype; *optional*, used if `-blockfilterindex=basic`
`indexes/blockfilter/basic/` | `fltrNNNNN.dat`<sup>[\[2\]](#note2)</sup> | Blockfilter index filters for the basic filtertype; *optional*, used if `-blockfilterindex=basic`
`wallets/` | | [Contains wallets](#multi-wallet-environment); can be specified by `-walletdir` option; if `wallets/` subdirectory does not exist, wallets reside in the [data directory](#data-directory-location)
+`./` | `anchors.dat` | Anchor IP address database, created on shutdown and deleted at startup. Anchors are last known outgoing block-relay-only peers that are tried to re-connect to on startup
`./` | `banlist.dat` | Stores the IPs/subnets of banned nodes
`./` | `bitcoin.conf` | User-defined [configuration settings](bitcoin-conf.md) for `bitcoind` or `bitcoin-qt`. File is not written to by the software and must be created manually. Path can be specified by `-conf` option
`./` | `bitcoind.pid` | Stores the process ID (PID) of `bitcoind` or `bitcoin-qt` while running; created at start and deleted on shutdown; can be specified by `-pid` option
@@ -66,26 +71,36 @@ Subdirectory | File(s) | Description
## Multi-wallet environment
-Wallets are Berkeley DB (BDB) databases:
+Wallets are Berkeley DB (BDB) or SQLite databases.
-Subdirectory | File(s) | Description
--------------|-------------------|------------
-`database/` | BDB logging files | Part of BDB environment; created at start and deleted on shutdown; a user *must keep it as safe* as personal wallet `wallet.dat`
-`./` | `db.log` | BDB error file
-`./` | `wallet.dat` | Personal wallet with keys and transactions. May be either a Berkeley DB or SQLite database file.
-`./` | `.walletlock` | Wallet lock file
-`./` | `wallet.dat-journal` | SQLite Rollback Journal file for `wallet.dat`. Usually created at start and deleted on shutdown. A user *must keep it as safe* as the `wallet.dat` file.
-
-1. Each user-defined wallet named "wallet_name" resides in `wallets/wallet_name/` subdirectory.
+1. Each user-defined wallet named "wallet_name" resides in the `wallets/wallet_name/` subdirectory.
2. The default (unnamed) wallet resides in `wallets/` subdirectory; if the latter does not exist, the wallet resides in the data directory.
-3. A wallet database path can be specified by `-wallet` option.
+3. A wallet database path can be specified with the `-wallet` option.
4. `wallet.dat` files must not be shared across different node instances, as that can result in key-reuse and double-spends due the lack of synchronization between instances.
5. Any copy or backup of the wallet should be done through a `backupwallet` call in order to update and lock the wallet, preventing any file corruption caused by updates during the copy.
+
+### Berkeley DB database based wallets
+
+Subdirectory | File(s) | Description
+-------------|-------------------|-------------
+`database/` | BDB logging files | Part of BDB environment; created at start and deleted on shutdown; a user *must keep it as safe* as personal wallet `wallet.dat`
+`./` | `db.log` | BDB error file
+`./` | `wallet.dat` | Personal wallet (a BDB database) with keys and transactions
+`./` | `.walletlock` | BDB wallet lock file
+
+### SQLite database based wallets
+
+Subdirectory | File | Description
+-------------|----------------------|-------------
+`./` | `wallet.dat` | Personal wallet (a SQLite database) with keys and transactions
+`./` | `wallet.dat-journal` | SQLite Rollback Journal file for `wallet.dat`. Usually created at start and deleted on shutdown. A user *must keep it as safe* as the `wallet.dat` file.
+
+
## GUI settings
`bitcoin-qt` uses [`QSettings`](https://doc.qt.io/qt-5/qsettings.html) class; this implies platform-specific [locations where application settings are stored](https://doc.qt.io/qt-5/qsettings.html#locations-where-application-settings-are-stored).
diff --git a/doc/fuzzing.md b/doc/fuzzing.md
index c97b8d4d50..80ce821091 100644
--- a/doc/fuzzing.md
+++ b/doc/fuzzing.md
@@ -12,7 +12,7 @@ $ CC=clang CXX=clang++ ./configure --enable-fuzz --with-sanitizers=address,fuzze
# macOS users: If you have problem with this step then make sure to read "macOS hints for
# libFuzzer" on https://github.com/bitcoin/bitcoin/blob/master/doc/fuzzing.md#macos-hints-for-libfuzzer
$ make
-$ src/test/fuzz/process_message
+$ FUZZ=process_message src/test/fuzz/fuzz
# abort fuzzing using ctrl-c
```
@@ -26,7 +26,7 @@ If you specify a corpus directory then any new coverage increasing inputs will b
```sh
$ mkdir -p process_message-seeded-from-thin-air/
-$ src/test/fuzz/process_message process_message-seeded-from-thin-air/
+$ FUZZ=process_message src/test/fuzz/fuzz process_message-seeded-from-thin-air/
INFO: Seed: 840522292
INFO: Loaded 1 modules (424174 inline 8-bit counters): 424174 [0x55e121ef9ab8, 0x55e121f613a6),
INFO: Loaded 1 PC tables (424174 PCs): 424174 [0x55e121f613a8,0x55e1225da288),
@@ -70,7 +70,7 @@ To fuzz `process_message` using the [`bitcoin-core/qa-assets`](https://github.co
```sh
$ git clone https://github.com/bitcoin-core/qa-assets
-$ src/test/fuzz/process_message qa-assets/fuzz_seed_corpus/process_message/
+$ FUZZ=process_message src/test/fuzz/fuzz qa-assets/fuzz_seed_corpus/process_message/
INFO: Seed: 1346407872
INFO: Loaded 1 modules (424174 inline 8-bit counters): 424174 [0x55d8a9004ab8, 0x55d8a906c3a6),
INFO: Loaded 1 PC tables (424174 PCs): 424174 [0x55d8a906c3a8,0x55d8a96e5288),
@@ -129,7 +129,7 @@ $ make
# try compiling using: AFL_NO_X86=1 make
$ mkdir -p inputs/ outputs/
$ echo A > inputs/thin-air-input
-$ afl/afl-fuzz -i inputs/ -o outputs/ -- src/test/fuzz/bech32
+$ FUZZ=bech32 afl/afl-fuzz -i inputs/ -o outputs/ -- src/test/fuzz/fuzz
# You may have to change a few kernel parameters to test optimally - afl-fuzz
# will print an error and suggestion if so.
```
@@ -153,7 +153,7 @@ $ cd ..
$ CC=$(pwd)/honggfuzz/hfuzz_cc/hfuzz-clang CXX=$(pwd)/honggfuzz/hfuzz_cc/hfuzz-clang++ ./configure --enable-fuzz --with-sanitizers=address,undefined
$ make
$ mkdir -p inputs/
-$ honggfuzz/honggfuzz -i inputs/ -- src/test/fuzz/process_message
+$ FUZZ=process_message honggfuzz/honggfuzz -i inputs/ -- src/test/fuzz/fuzz
```
Read the [Honggfuzz documentation](https://github.com/google/honggfuzz/blob/master/docs/USAGE.md) for more information.
diff --git a/doc/man/bitcoin-cli.1 b/doc/man/bitcoin-cli.1
index 129651d8e9..588ae81fce 100644
--- a/doc/man/bitcoin-cli.1
+++ b/doc/man/bitcoin-cli.1
@@ -1,115 +1,5 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
-.TH BITCOIN-CLI "1" "February 2019" "bitcoin-cli v0.17.99.0" "User Commands"
+.TH BITCOIN-CLI "1"
.SH NAME
-bitcoin-cli \- manual page for bitcoin-cli v0.17.99.0
-.SH SYNOPSIS
-.B bitcoin-cli
-[\fI\,options\/\fR] \fI\,<command> \/\fR[\fI\,params\/\fR] \fI\,Send command to Bitcoin Core\/\fR
-.br
-.B bitcoin-cli
-[\fI\,options\/\fR] \fI\,-named <command> \/\fR[\fI\,name=value\/\fR]... \fI\,Send command to Bitcoin Core (with named arguments)\/\fR
-.br
-.B bitcoin-cli
-[\fI\,options\/\fR] \fI\,help List commands\/\fR
-.br
-.B bitcoin-cli
-[\fI\,options\/\fR] \fI\,help <command> Get help for a command\/\fR
-.SH DESCRIPTION
-Bitcoin Core RPC client version v0.17.99.0
-.SH OPTIONS
-.HP
-\-?
-.IP
-Print this help message and exit
-.HP
-\fB\-conf=\fR<file>
-.IP
-Specify configuration file. Relative paths will be prefixed by datadir
-location. (default: bitcoin.conf)
-.HP
-\fB\-datadir=\fR<dir>
-.IP
-Specify data directory
-.HP
-\fB\-getinfo\fR
-.IP
-Get general information from the remote server. Note that unlike
-server\-side RPC calls, the results of \fB\-getinfo\fR is the result of
-multiple non\-atomic requests. Some entries in the result may
-represent results from different states (e.g. wallet balance may
-be as of a different block from the chain state reported)
-.HP
-\fB\-named\fR
-.IP
-Pass named instead of positional arguments (default: false)
-.HP
-\fB\-rpcclienttimeout=\fR<n>
-.IP
-Timeout in seconds during HTTP requests, or 0 for no timeout. (default:
-900)
-.HP
-\fB\-rpcconnect=\fR<ip>
-.IP
-Send commands to node running on <ip> (default: 127.0.0.1)
-.HP
-\fB\-rpccookiefile=\fR<loc>
-.IP
-Location of the auth cookie. Relative paths will be prefixed by a
-net\-specific datadir location. (default: data dir)
-.HP
-\fB\-rpcpassword=\fR<pw>
-.IP
-Password for JSON\-RPC connections
-.HP
-\fB\-rpcport=\fR<port>
-.IP
-Connect to JSON\-RPC on <port> (default: 8332, testnet: 18332, regtest:
-18443)
-.HP
-\fB\-rpcuser=\fR<user>
-.IP
-Username for JSON\-RPC connections
-.HP
-\fB\-rpcwait\fR
-.IP
-Wait for RPC server to start
-.HP
-\fB\-rpcwallet=\fR<walletname>
-.IP
-Send RPC for non\-default wallet on RPC server (needs to exactly match
-corresponding \fB\-wallet\fR option passed to bitcoind). This changes
-the RPC endpoint used, e.g.
-http://127.0.0.1:8332/wallet/<walletname>
-.HP
-\fB\-stdin\fR
-.IP
-Read extra arguments from standard input, one per line until EOF/Ctrl\-D
-(recommended for sensitive information such as passphrases). When
-combined with \fB\-stdinrpcpass\fR, the first line from standard input
-is used for the RPC password.
-.HP
-\fB\-stdinrpcpass\fR
-.IP
-Read RPC password from standard input as a single line. When combined
-with \fB\-stdin\fR, the first line from standard input is used for the
-RPC password.
-.HP
-\fB\-version\fR
-.IP
-Print version and exit
-.PP
-Chain selection options:
-.HP
-\fB\-testnet\fR
-.IP
-Use the test chain
-.SH COPYRIGHT
-Copyright (C) 2009-2019 The Bitcoin Core developers
+bitcoin-cli \- manual page for bitcoin-cli
-Please contribute if you find Bitcoin Core useful. Visit
-<https://bitcoincore.org> for further information about the software.
-The source code is available from <https://github.com/bitcoin/bitcoin>.
-
-This is experimental software.
-Distributed under the MIT software license, see the accompanying file COPYING
-or <https://opensource.org/licenses/MIT>
+This is a placefolder file. Please follow the instructions in \fIcontrib/devtools/README.md\fR to generate the manual pages after a release.
diff --git a/doc/man/bitcoin-qt.1 b/doc/man/bitcoin-qt.1
index f68be21e8d..9c75e9fe54 100644
--- a/doc/man/bitcoin-qt.1
+++ b/doc/man/bitcoin-qt.1
@@ -1,610 +1,5 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
-.TH BITCOIN-QT "1" "February 2019" "bitcoin-qt v0.17.99.0" "User Commands"
+.TH BITCOIN-QT "1"
.SH NAME
-bitcoin-qt \- manual page for bitcoin-qt v0.17.99.0
-.SH SYNOPSIS
-.B bitcoin-qt
-[\fI\,command-line options\/\fR]
-.SH DESCRIPTION
-Bitcoin Core version v0.17.99.0 (64\-bit)
-.SH OPTIONS
-.HP
-\-?
-.IP
-Print this help message and exit
-.HP
-\fB\-alertnotify=\fR<cmd>
-.IP
-Execute command when a relevant alert is received or we see a really
-long fork (%s in cmd is replaced by message)
-.HP
-\fB\-assumevalid=\fR<hex>
-.IP
-If this block is in the chain assume that it and its ancestors are valid
-and potentially skip their script verification (0 to verify all,
-default:
-0000000000000000002e63058c023a9a1de233554f28c7b21380b6c9003f36a8,
-testnet:
-0000000000000037a8cd3e06cd5edbfe9dd1dbcc5dacab279376ef7cfc2b4c75)
-.HP
-\fB\-blocknotify=\fR<cmd>
-.IP
-Execute command when the best block changes (%s in cmd is replaced by
-block hash)
-.HP
-\fB\-blockreconstructionextratxn=\fR<n>
-.IP
-Extra transactions to keep in memory for compact block reconstructions
-(default: 100)
-.HP
-\fB\-blocksdir=\fR<dir>
-.IP
-Specify blocks directory (default: <datadir>/blocks)
-.HP
-\fB\-conf=\fR<file>
-.IP
-Specify configuration file. Relative paths will be prefixed by datadir
-location. (default: bitcoin.conf)
-.HP
-\fB\-daemon\fR
-.IP
-Run in the background as a daemon and accept commands
-.HP
-\fB\-datadir=\fR<dir>
-.IP
-Specify data directory
-.HP
-\fB\-dbcache=\fR<n>
-.IP
-Set database cache size in MiB (4 to 16384, default: 450)
-.HP
-\fB\-debuglogfile=\fR<file>
-.IP
-Specify location of debug log file. Relative paths will be prefixed by a
-net\-specific datadir location. (\fB\-nodebuglogfile\fR to disable;
-default: debug.log)
-.HP
-\fB\-includeconf=\fR<file>
-.IP
-Specify additional configuration file, relative to the \fB\-datadir\fR path
-(only useable from configuration file, not command line)
-.HP
-\fB\-loadblock=\fR<file>
-.IP
-Imports blocks from external blk000??.dat file on startup
-.HP
-\fB\-maxmempool=\fR<n>
-.IP
-Keep the transaction memory pool below <n> megabytes (default: 300)
-.HP
-\fB\-maxorphantx=\fR<n>
-.IP
-Keep at most <n> unconnectable transactions in memory (default: 100)
-.HP
-\fB\-mempoolexpiry=\fR<n>
-.IP
-Do not keep transactions in the mempool longer than <n> hours (default:
-336)
-.HP
-\fB\-par=\fR<n>
-.IP
-Set the number of script verification threads (\fB\-8\fR to 16, 0 = auto, <0 =
-leave that many cores free, default: 0)
-.HP
-\fB\-persistmempool\fR
-.IP
-Whether to save the mempool on shutdown and load on restart (default: 1)
-.HP
-\fB\-pid=\fR<file>
-.IP
-Specify pid file. Relative paths will be prefixed by a net\-specific
-datadir location. (default: bitcoind.pid)
-.HP
-\fB\-prune=\fR<n>
-.IP
-Reduce storage requirements by enabling pruning (deleting) of old
-blocks. This allows the pruneblockchain RPC to be called to
-delete specific blocks, and enables automatic pruning of old
-blocks if a target size in MiB is provided. This mode is
-incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
-setting requires re\-downloading the entire blockchain. (default:
-0 = disable pruning blocks, 1 = allow manual pruning via RPC,
->=550 = automatically prune block files to stay under the
-specified target size in MiB)
-.HP
-\fB\-reindex\fR
-.IP
-Rebuild chain state and block index from the blk*.dat files on disk
-.HP
-\fB\-reindex\-chainstate\fR
-.IP
-Rebuild chain state from the currently indexed blocks. When in pruning
-mode or if blocks on disk might be corrupted, use full \fB\-reindex\fR
-instead.
-.HP
-\fB\-sysperms\fR
-.IP
-Create new files with system default permissions, instead of umask 077
-(only effective with disabled wallet functionality)
-.HP
-\fB\-txindex\fR
-.IP
-Maintain a full transaction index, used by the getrawtransaction rpc
-call (default: 0)
-.HP
-\fB\-version\fR
-.IP
-Print version and exit
-.PP
-Connection options:
-.HP
-\fB\-addnode=\fR<ip>
-.IP
-Add a node to connect to and attempt to keep the connection open (see
-the `addnode` RPC command help for more info). This option can be
-specified multiple times to add multiple nodes.
-.HP
-\fB\-banscore=\fR<n>
-.IP
-Threshold for disconnecting misbehaving peers (default: 100)
-.HP
-\fB\-bantime=\fR<n>
-.IP
-Number of seconds to keep misbehaving peers from reconnecting (default:
-86400)
-.HP
-\fB\-bind=\fR<addr>
-.IP
-Bind to given address and always listen on it. Use [host]:port notation
-for IPv6
-.HP
-\fB\-connect=\fR<ip>
-.IP
-Connect only to the specified node; \fB\-noconnect\fR disables automatic
-connections (the rules for this peer are the same as for
-\fB\-addnode\fR). This option can be specified multiple times to connect
-to multiple nodes.
-.HP
-\fB\-discover\fR
-.IP
-Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
-or \fB\-proxy\fR)
-.HP
-\fB\-dns\fR
-.IP
-Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
-.HP
-\fB\-dnsseed\fR
-.IP
-Query for peer addresses via DNS lookup, if low on addresses (default: 1
-unless \fB\-connect\fR used)
-.HP
-\fB\-externalip=\fR<ip>
-.IP
-Specify your own public address
-.HP
-\fB\-forcednsseed\fR
-.IP
-Always query for peer addresses via DNS lookup (default: 0)
-.HP
-\fB\-listen\fR
-.IP
-Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
-.HP
-\fB\-listenonion\fR
-.IP
-Automatically create Tor hidden service (default: 1)
-.HP
-\fB\-maxconnections=\fR<n>
-.IP
-Maintain at most <n> connections to peers (default: 125)
-.HP
-\fB\-maxreceivebuffer=\fR<n>
-.IP
-Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
-.HP
-\fB\-maxsendbuffer=\fR<n>
-.IP
-Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
-.HP
-\fB\-maxtimeadjustment\fR
-.IP
-Maximum allowed median peer time offset adjustment. Local perspective of
-time may be influenced by peers forward or backward by this
-amount. (default: 4200 seconds)
-.HP
-\fB\-maxuploadtarget=\fR<n>
-.IP
-Tries to keep outbound traffic under the given target (in MiB per 24h),
-0 = no limit (default: 0)
-.HP
-\fB\-onion=\fR<ip:port>
-.IP
-Use separate SOCKS5 proxy to reach peers via Tor hidden services, set
-\fB\-noonion\fR to disable (default: \fB\-proxy\fR)
-.HP
-\fB\-onlynet=\fR<net>
-.IP
-Make outgoing connections only through network <net> (ipv4, ipv6 or
-onion). Incoming connections are not affected by this option.
-This option can be specified multiple times to allow multiple
-networks.
-.HP
-\fB\-peerbloomfilters\fR
-.IP
-Support filtering of blocks and transaction with bloom filters (default:
-1)
-.HP
-\fB\-permitbaremultisig\fR
-.IP
-Relay non\-P2SH multisig (default: 1)
-.HP
-\fB\-port=\fR<port>
-.IP
-Listen for connections on <port> (default: 8333, testnet: 18333,
-regtest: 18444)
-.HP
-\fB\-proxy=\fR<ip:port>
-.IP
-Connect through SOCKS5 proxy, set \fB\-noproxy\fR to disable (default:
-disabled)
-.HP
-\fB\-proxyrandomize\fR
-.IP
-Randomize credentials for every proxy connection. This enables Tor
-stream isolation (default: 1)
-.HP
-\fB\-seednode=\fR<ip>
-.IP
-Connect to a node to retrieve peer addresses, and disconnect. This
-option can be specified multiple times to connect to multiple
-nodes.
-.HP
-\fB\-timeout=\fR<n>
-.IP
-Specify connection timeout in milliseconds (minimum: 1, default: 5000)
-.HP
-\fB\-torcontrol=\fR<ip>:<port>
-.IP
-Tor control port to use if onion listening enabled (default:
-127.0.0.1:9051)
-.HP
-\fB\-torpassword=\fR<pass>
-.IP
-Tor control port password (default: empty)
-.HP
-\fB\-upnp\fR
-.IP
-Use UPnP to map the listening port (default: 0)
-.HP
-\fB\-whitebind=\fR<addr>
-.IP
-Bind to given address and whitelist peers connecting to it. Use
-[host]:port notation for IPv6
-.HP
-\fB\-whitelist=\fR<IP address or network>
-.IP
-Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or
-CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple
-times. Whitelisted peers cannot be DoS banned and their
-transactions are always relayed, even if they are already in the
-mempool, useful e.g. for a gateway
-.PP
-Wallet options:
-.HP
-\fB\-addresstype\fR
-.IP
-What type of addresses to use ("legacy", "p2sh\-segwit", or "bech32",
-default: "p2sh\-segwit")
-.HP
-\fB\-avoidpartialspends\fR
-.IP
-Group outputs by address, selecting all or none, instead of selecting on
-a per\-output basis. Privacy is improved as an address is only
-used once (unless someone sends to it after spending from it),
-but may result in slightly higher fees as suboptimal coin
-selection may result due to the added limitation (default: 0)
-.HP
-\fB\-changetype\fR
-.IP
-What type of change to use ("legacy", "p2sh\-segwit", or "bech32").
-Default is same as \fB\-addresstype\fR, except when
-\fB\-addresstype\fR=\fI\,p2sh\-segwit\/\fR a native segwit output is used when
-sending to a native segwit address)
-.HP
-\fB\-disablewallet\fR
-.IP
-Do not load the wallet and disable wallet RPC calls
-.HP
-\fB\-discardfee=\fR<amt>
-.IP
-The fee rate (in BTC/kB) that indicates your tolerance for discarding
-change by adding it to the fee (default: 0.0001). Note: An output
-is discarded if it is dust at this rate, but we will always
-discard up to the dust relay fee and a discard fee above that is
-limited by the fee estimate for the longest target
-.HP
-\fB\-fallbackfee=\fR<amt>
-.IP
-A fee rate (in BTC/kB) that will be used when fee estimation has
-insufficient data (default: 0.0002)
-.HP
-\fB\-keypool=\fR<n>
-.IP
-Set key pool size to <n> (default: 1000)
-.HP
-\fB\-mintxfee=\fR<amt>
-.IP
-Fees (in BTC/kB) smaller than this are considered zero fee for
-transaction creation (default: 0.00001)
-.HP
-\fB\-paytxfee=\fR<amt>
-.IP
-Fee (in BTC/kB) to add to transactions you send (default: 0.00)
-.HP
-\fB\-rescan\fR
-.IP
-Rescan the block chain for missing wallet transactions on startup
-.HP
-\fB\-salvagewallet\fR
-.IP
-Attempt to recover private keys from a corrupt wallet on startup
-.HP
-\fB\-spendzeroconfchange\fR
-.IP
-Spend unconfirmed change when sending transactions (default: 1)
-.HP
-\fB\-txconfirmtarget=\fR<n>
-.IP
-If paytxfee is not set, include enough fee so transactions begin
-confirmation on average within n blocks (default: 6)
-.HP
-\fB\-upgradewallet\fR
-.IP
-Upgrade wallet to latest format on startup
-.HP
-\fB\-wallet=\fR<path>
-.IP
-Specify wallet database path. Can be specified multiple times to load
-multiple wallets. Path is interpreted relative to <walletdir> if
-it is not absolute, and will be created if it does not exist (as
-a directory containing a wallet.dat file and log files). For
-backwards compatibility this will also accept names of existing
-data files in <walletdir>.)
-.HP
-\fB\-walletbroadcast\fR
-.IP
-Make the wallet broadcast transactions (default: 1)
-.HP
-\fB\-walletdir=\fR<dir>
-.IP
-Specify directory to hold wallets (default: <datadir>/wallets if it
-exists, otherwise <datadir>)
-.HP
-\fB\-walletnotify=\fR<cmd>
-.IP
-Execute command when a wallet transaction changes (%s in cmd is replaced
-by TxID)
-.HP
-\fB\-walletrbf\fR
-.IP
-Send transactions with full\-RBF opt\-in enabled (RPC only, default: 0)
-.HP
-\fB\-zapwallettxes=\fR<mode>
-.IP
-Delete all wallet transactions and only recover those parts of the
-blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
-payment request information, 2 = drop tx meta data)
-.PP
-ZeroMQ notification options:
-.HP
-\fB\-zmqpubhashblock=\fR<address>
-.IP
-Enable publish hash block in <address>
-.HP
-\fB\-zmqpubhashtx=\fR<address>
-.IP
-Enable publish hash transaction in <address>
-.HP
-\fB\-zmqpubrawblock=\fR<address>
-.IP
-Enable publish raw block in <address>
-.HP
-\fB\-zmqpubrawtx=\fR<address>
-.IP
-Enable publish raw transaction in <address>
-.PP
-Debugging/Testing options:
-.HP
-\fB\-debug=\fR<category>
-.IP
-Output debugging information (default: \fB\-nodebug\fR, supplying <category> is
-optional). If <category> is not supplied or if <category> = 1,
-output all debugging information. <category> can be: net, tor,
-mempool, http, bench, zmq, db, rpc, estimatefee, addrman,
-selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej,
-libevent, coindb, qt, leveldb.
-.HP
-\fB\-debugexclude=\fR<category>
-.IP
-Exclude debugging information for a category. Can be used in conjunction
-with \fB\-debug\fR=\fI\,1\/\fR to output debug logs for all categories except one
-or more specified categories.
-.HP
-\fB\-help\-debug\fR
-.IP
-Print help message with debugging options and exit
-.HP
-\fB\-logips\fR
-.IP
-Include IP addresses in debug output (default: 0)
-.HP
-\fB\-logtimestamps\fR
-.IP
-Prepend debug output with timestamp (default: 1)
-.HP
-\fB\-maxtxfee=\fR<amt>
-.IP
-Maximum total fees (in BTC) to use in a single wallet transaction or raw
-transaction; setting this too low may abort large transactions
-(default: 0.10)
-.HP
-\fB\-printtoconsole\fR
-.IP
-Send trace/debug info to console (default: 1 when no \fB\-daemon\fR. To disable
-logging to file, set \fB\-nodebuglogfile\fR)
-.HP
-\fB\-shrinkdebugfile\fR
-.IP
-Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
-.HP
-\fB\-uacomment=\fR<cmt>
-.IP
-Append comment to the user agent string
-.PP
-Chain selection options:
-.HP
-\fB\-testnet\fR
-.IP
-Use the test chain
-.PP
-Node relay options:
-.HP
-\fB\-bytespersigop\fR
-.IP
-Equivalent bytes per sigop in transactions for relay and mining
-(default: 20)
-.HP
-\fB\-datacarrier\fR
-.IP
-Relay and mine data carrier transactions (default: 1)
-.HP
-\fB\-datacarriersize\fR
-.IP
-Maximum size of data in data carrier transactions we relay and mine
-(default: 83)
-.HP
-.HP
-\fB\-minrelaytxfee=\fR<amt>
-.IP
-Fees (in BTC/kB) smaller than this are considered zero fee for relaying,
-mining and transaction creation (default: 0.00001)
-.HP
-\fB\-whitelistforcerelay\fR
-.IP
-Force relay of transactions from whitelisted peers even if they violate
-local relay policy (default: 0)
-.HP
-\fB\-whitelistrelay\fR
-.IP
-Accept relayed transactions received from whitelisted peers even when
-not relaying transactions (default: 1)
-.PP
-Block creation options:
-.HP
-\fB\-blockmaxweight=\fR<n>
-.IP
-Set maximum BIP141 block weight (default: 3996000)
-.HP
-\fB\-blockmintxfee=\fR<amt>
-.IP
-Set lowest fee rate (in BTC/kB) for transactions to be included in block
-creation. (default: 0.00001)
-.PP
-RPC server options:
-.HP
-\fB\-rest\fR
-.IP
-Accept public REST requests (default: 0)
-.HP
-\fB\-rpcallowip=\fR<ip>
-.IP
-Allow JSON\-RPC connections from specified source. Valid for <ip> are a
-single IP (e.g. 1.2.3.4), a network/netmask (e.g.
-1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This
-option can be specified multiple times
-.HP
-\fB\-rpcauth=\fR<userpw>
-.IP
-Username and HMAC\-SHA\-256 hashed password for JSON\-RPC connections. The
-field <userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A
-canonical python script is included in share/rpcauth. The client
-then connects normally using the
-rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This
-option can be specified multiple times
-.HP
-\fB\-rpcbind=\fR<addr>[:port]
-.IP
-Bind to given address to listen for JSON\-RPC connections. Do not expose
-the RPC server to untrusted networks such as the public internet!
-This option is ignored unless \fB\-rpcallowip\fR is also passed. Port is
-optional and overrides \fB\-rpcport\fR. Use [host]:port notation for
-IPv6. This option can be specified multiple times (default:
-127.0.0.1 and ::1 i.e., localhost)
-.HP
-\fB\-rpccookiefile=\fR<loc>
-.IP
-Location of the auth cookie. Relative paths will be prefixed by a
-net\-specific datadir location. (default: data dir)
-.HP
-\fB\-rpcpassword=\fR<pw>
-.IP
-Password for JSON\-RPC connections
-.HP
-\fB\-rpcport=\fR<port>
-.IP
-Listen for JSON\-RPC connections on <port> (default: 8332, testnet:
-18332, regtest: 18443)
-.HP
-\fB\-rpcserialversion\fR
-.IP
-Sets the serialization of raw transaction or block hex returned in
-non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1)
-.HP
-\fB\-rpcthreads=\fR<n>
-.IP
-Set the number of threads to service RPC calls (default: 4)
-.HP
-\fB\-rpcuser=\fR<user>
-.IP
-Username for JSON\-RPC connections
-.HP
-\fB\-server\fR
-.IP
-Accept command line and JSON\-RPC commands
-.PP
-UI Options:
-.HP
-\fB\-choosedatadir\fR
-.IP
-Choose data directory on startup (default: 0)
-.HP
-\fB\-lang=\fR<lang>
-.IP
-Set language, for example "de_DE" (default: system locale)
-.HP
-\fB\-min\fR
-.IP
-Start minimized
-.HP
-\fB\-resetguisettings\fR
-.IP
-Reset all settings changed in the GUI
-.HP
-\fB\-rootcertificates=\fR<file>
-.IP
-Set SSL root certificates for payment request (default: \fB\-system\-\fR)
-.HP
-\fB\-splash\fR
-.IP
-Show splash screen on startup (default: 1)
-.SH COPYRIGHT
-Copyright (C) 2009-2019 The Bitcoin Core developers
+bitcoin-qt \- manual page for bitcoin-qt
-Please contribute if you find Bitcoin Core useful. Visit
-<https://bitcoincore.org> for further information about the software.
-The source code is available from <https://github.com/bitcoin/bitcoin>.
-
-This is experimental software.
-Distributed under the MIT software license, see the accompanying file COPYING
-or <https://opensource.org/licenses/MIT>
+This is a placefolder file. Please follow the instructions in \fIcontrib/devtools/README.md\fR to generate the manual pages after a release.
diff --git a/doc/man/bitcoin-tx.1 b/doc/man/bitcoin-tx.1
index b4c7698896..148a5890b0 100644
--- a/doc/man/bitcoin-tx.1
+++ b/doc/man/bitcoin-tx.1
@@ -1,116 +1,5 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
-.TH BITCOIN-TX "1" "February 2019" "bitcoin-tx v0.17.99.0" "User Commands"
+.TH BITCOIN-TX "1"
.SH NAME
-bitcoin-tx \- manual page for bitcoin-tx v0.17.99.0
-.SH SYNOPSIS
-.B bitcoin-tx
-[\fI\,options\/\fR] \fI\,<hex-tx> \/\fR[\fI\,commands\/\fR] \fI\,Update hex-encoded bitcoin transaction\/\fR
-.br
-.B bitcoin-tx
-[\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] \fI\,Create hex-encoded bitcoin transaction\/\fR
-.SH DESCRIPTION
-Bitcoin Core bitcoin\-tx utility version v0.17.99.0
-.SH OPTIONS
-.HP
-\-?
-.IP
-Print this help message and exit
-.HP
-\fB\-create\fR
-.IP
-Create new, empty TX.
-.HP
-\fB\-json\fR
-.IP
-Select JSON output
-.HP
-\fB\-txid\fR
-.IP
-Output only the hex\-encoded transaction id of the resultant transaction.
-.PP
-Chain selection options:
-.HP
-\fB\-testnet\fR
-.IP
-Use the test chain
-.PP
-Commands:
-.IP
-delin=N
-.IP
-Delete input N from TX
-.IP
-delout=N
-.IP
-Delete output N from TX
-.IP
-in=TXID:VOUT(:SEQUENCE_NUMBER)
-.IP
-Add input to TX
-.IP
-locktime=N
-.IP
-Set TX lock time to N
-.IP
-nversion=N
-.IP
-Set TX version to N
-.IP
-outaddr=VALUE:ADDRESS
-.IP
-Add address\-based output to TX
-.IP
-outdata=[VALUE:]DATA
-.IP
-Add data\-based output to TX
-.IP
-outmultisig=VALUE:REQUIRED:PUBKEYS:PUBKEY1:PUBKEY2:....[:FLAGS]
-.IP
-Add Pay To n\-of\-m Multi\-sig output to TX. n = REQUIRED, m = PUBKEYS.
-Optionally add the "W" flag to produce a
-pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to
-wrap the output in a pay\-to\-script\-hash.
-.IP
-outpubkey=VALUE:PUBKEY[:FLAGS]
-.IP
-Add pay\-to\-pubkey output to TX. Optionally add the "W" flag to produce a
-pay\-to\-witness\-pubkey\-hash output. Optionally add the "S" flag to
-wrap the output in a pay\-to\-script\-hash.
-.IP
-outscript=VALUE:SCRIPT[:FLAGS]
-.IP
-Add raw script output to TX. Optionally add the "W" flag to produce a
-pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to
-wrap the output in a pay\-to\-script\-hash.
-.IP
-replaceable(=N)
-.IP
-Set RBF opt\-in sequence number for input N (if not provided, opt\-in all
-available inputs)
-.IP
-sign=SIGHASH\-FLAGS
-.IP
-Add zero or more signatures to transaction. This command requires JSON
-registers:prevtxs=JSON object, privatekeys=JSON object. See
-signrawtransactionwithkey docs for format of sighash flags, JSON
-objects.
-.PP
-Register Commands:
-.IP
-load=NAME:FILENAME
-.IP
-Load JSON file FILENAME into register NAME
-.IP
-set=NAME:JSON\-STRING
-.IP
-Set register NAME to given JSON\-STRING
-.SH COPYRIGHT
-Copyright (C) 2009-2019 The Bitcoin Core developers
+bitcoin-tx \- manual page for bitcoin-tx
-Please contribute if you find Bitcoin Core useful. Visit
-<https://bitcoincore.org> for further information about the software.
-The source code is available from <https://github.com/bitcoin/bitcoin>.
-
-This is experimental software.
-Distributed under the MIT software license, see the accompanying file COPYING
-or <https://opensource.org/licenses/MIT>
+This is a placefolder file. Please follow the instructions in \fIcontrib/devtools/README.md\fR to generate the manual pages after a release.
diff --git a/doc/man/bitcoin-wallet.1 b/doc/man/bitcoin-wallet.1
index aadea09a2b..69133b33f7 100644
--- a/doc/man/bitcoin-wallet.1
+++ b/doc/man/bitcoin-wallet.1
@@ -1,63 +1,5 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
-.TH BITCOIN-WALLET "1" "February 2019" "bitcoin-wallet v0.17.99.0" "User Commands"
+.TH BITCOIN-WALLET "1"
.SH NAME
-bitcoin-wallet \- manual page for bitcoin-wallet v0.17.99.0
-.SH DESCRIPTION
-Bitcoin Core bitcoin\-wallet version v0.17.99.0
-.PP
-wallet\-tool is an offline tool for creating and interacting with Bitcoin Core wallet files.
-By default wallet\-tool will act on wallets in the default mainnet wallet directory in the datadir.
-To change the target wallet, use the \fB\-datadir\fR, \fB\-wallet\fR and \fB\-testnet\fR/\-regtest arguments.
-.SS "Usage:"
-.IP
-bitcoin\-wallet [options] <command>
-.SH OPTIONS
-.HP
-\-?
-.IP
-Print this help message and exit
-.HP
-\fB\-datadir=\fR<dir>
-.IP
-Specify data directory
-.HP
-\fB\-wallet=\fR<wallet\-name>
-.IP
-Specify wallet name
-.PP
-Debugging/Testing options:
-.HP
-\fB\-debug=\fR<category>
-.IP
-Output debugging information (default: 0).
-.HP
-\fB\-printtoconsole\fR
-.IP
-Send trace/debug info to console (default: 1 when no \fB\-debug\fR is true, 0
-otherwise.
-.PP
-Chain selection options:
-.HP
-\fB\-testnet\fR
-.IP
-Use the test chain
-.PP
-Commands:
-.IP
-create
-.IP
-Create new wallet file
-.IP
-info
-.IP
-Get wallet info
-.SH COPYRIGHT
-Copyright (C) 2009-2019 The Bitcoin Core developers
+bitcoin-wallet \- manual page for bitcoin-wallet
-Please contribute if you find Bitcoin Core useful. Visit
-<https://bitcoincore.org> for further information about the software.
-The source code is available from <https://github.com/bitcoin/bitcoin>.
-
-This is experimental software.
-Distributed under the MIT software license, see the accompanying file COPYING
-or <https://opensource.org/licenses/MIT>
+This is a placefolder file. Please follow the instructions in \fIcontrib/devtools/README.md\fR to generate the manual pages after a release.
diff --git a/doc/man/bitcoind.1 b/doc/man/bitcoind.1
index 211ba10285..de338182ff 100644
--- a/doc/man/bitcoind.1
+++ b/doc/man/bitcoind.1
@@ -1,583 +1,5 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
-.TH BITCOIND "1" "February 2019" "bitcoind v0.17.99.0" "User Commands"
+.TH BITCOIND "1"
.SH NAME
-bitcoind \- manual page for bitcoind v0.17.99.0
-.SH SYNOPSIS
-.B bitcoind
-[\fI\,options\/\fR] \fI\,Start Bitcoin Core Daemon\/\fR
-.SH DESCRIPTION
-Bitcoin Core Daemon version v0.17.99.0
-.SH OPTIONS
-.HP
-\-?
-.IP
-Print this help message and exit
-.HP
-\fB\-alertnotify=\fR<cmd>
-.IP
-Execute command when a relevant alert is received or we see a really
-long fork (%s in cmd is replaced by message)
-.HP
-\fB\-assumevalid=\fR<hex>
-.IP
-If this block is in the chain assume that it and its ancestors are valid
-and potentially skip their script verification (0 to verify all,
-default:
-0000000000000000002e63058c023a9a1de233554f28c7b21380b6c9003f36a8,
-testnet:
-0000000000000037a8cd3e06cd5edbfe9dd1dbcc5dacab279376ef7cfc2b4c75)
-.HP
-\fB\-blocknotify=\fR<cmd>
-.IP
-Execute command when the best block changes (%s in cmd is replaced by
-block hash)
-.HP
-\fB\-blockreconstructionextratxn=\fR<n>
-.IP
-Extra transactions to keep in memory for compact block reconstructions
-(default: 100)
-.HP
-\fB\-blocksdir=\fR<dir>
-.IP
-Specify blocks directory (default: <datadir>/blocks)
-.HP
-\fB\-conf=\fR<file>
-.IP
-Specify configuration file. Relative paths will be prefixed by datadir
-location. (default: bitcoin.conf)
-.HP
-\fB\-daemon\fR
-.IP
-Run in the background as a daemon and accept commands
-.HP
-\fB\-datadir=\fR<dir>
-.IP
-Specify data directory
-.HP
-\fB\-dbcache=\fR<n>
-.IP
-Set database cache size in MiB (4 to 16384, default: 450)
-.HP
-\fB\-debuglogfile=\fR<file>
-.IP
-Specify location of debug log file. Relative paths will be prefixed by a
-net\-specific datadir location. (\fB\-nodebuglogfile\fR to disable;
-default: debug.log)
-.HP
-\fB\-includeconf=\fR<file>
-.IP
-Specify additional configuration file, relative to the \fB\-datadir\fR path
-(only useable from configuration file, not command line)
-.HP
-\fB\-loadblock=\fR<file>
-.IP
-Imports blocks from external blk000??.dat file on startup
-.HP
-\fB\-maxmempool=\fR<n>
-.IP
-Keep the transaction memory pool below <n> megabytes (default: 300)
-.HP
-\fB\-maxorphantx=\fR<n>
-.IP
-Keep at most <n> unconnectable transactions in memory (default: 100)
-.HP
-\fB\-mempoolexpiry=\fR<n>
-.IP
-Do not keep transactions in the mempool longer than <n> hours (default:
-336)
-.HP
-\fB\-par=\fR<n>
-.IP
-Set the number of script verification threads (\fB\-8\fR to 16, 0 = auto, <0 =
-leave that many cores free, default: 0)
-.HP
-\fB\-persistmempool\fR
-.IP
-Whether to save the mempool on shutdown and load on restart (default: 1)
-.HP
-\fB\-pid=\fR<file>
-.IP
-Specify pid file. Relative paths will be prefixed by a net\-specific
-datadir location. (default: bitcoind.pid)
-.HP
-\fB\-prune=\fR<n>
-.IP
-Reduce storage requirements by enabling pruning (deleting) of old
-blocks. This allows the pruneblockchain RPC to be called to
-delete specific blocks, and enables automatic pruning of old
-blocks if a target size in MiB is provided. This mode is
-incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
-setting requires re\-downloading the entire blockchain. (default:
-0 = disable pruning blocks, 1 = allow manual pruning via RPC,
->=550 = automatically prune block files to stay under the
-specified target size in MiB)
-.HP
-\fB\-reindex\fR
-.IP
-Rebuild chain state and block index from the blk*.dat files on disk
-.HP
-\fB\-reindex\-chainstate\fR
-.IP
-Rebuild chain state from the currently indexed blocks. When in pruning
-mode or if blocks on disk might be corrupted, use full \fB\-reindex\fR
-instead.
-.HP
-\fB\-sysperms\fR
-.IP
-Create new files with system default permissions, instead of umask 077
-(only effective with disabled wallet functionality)
-.HP
-\fB\-txindex\fR
-.IP
-Maintain a full transaction index, used by the getrawtransaction rpc
-call (default: 0)
-.HP
-\fB\-version\fR
-.IP
-Print version and exit
-.PP
-Connection options:
-.HP
-\fB\-addnode=\fR<ip>
-.IP
-Add a node to connect to and attempt to keep the connection open (see
-the `addnode` RPC command help for more info). This option can be
-specified multiple times to add multiple nodes.
-.HP
-\fB\-banscore=\fR<n>
-.IP
-Threshold for disconnecting misbehaving peers (default: 100)
-.HP
-\fB\-bantime=\fR<n>
-.IP
-Number of seconds to keep misbehaving peers from reconnecting (default:
-86400)
-.HP
-\fB\-bind=\fR<addr>
-.IP
-Bind to given address and always listen on it. Use [host]:port notation
-for IPv6
-.HP
-\fB\-connect=\fR<ip>
-.IP
-Connect only to the specified node; \fB\-noconnect\fR disables automatic
-connections (the rules for this peer are the same as for
-\fB\-addnode\fR). This option can be specified multiple times to connect
-to multiple nodes.
-.HP
-\fB\-discover\fR
-.IP
-Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
-or \fB\-proxy\fR)
-.HP
-\fB\-dns\fR
-.IP
-Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
-.HP
-\fB\-dnsseed\fR
-.IP
-Query for peer addresses via DNS lookup, if low on addresses (default: 1
-unless \fB\-connect\fR used)
-.HP
-\fB\-externalip=\fR<ip>
-.IP
-Specify your own public address
-.HP
-\fB\-forcednsseed\fR
-.IP
-Always query for peer addresses via DNS lookup (default: 0)
-.HP
-\fB\-listen\fR
-.IP
-Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
-.HP
-\fB\-listenonion\fR
-.IP
-Automatically create Tor hidden service (default: 1)
-.HP
-\fB\-maxconnections=\fR<n>
-.IP
-Maintain at most <n> connections to peers (default: 125)
-.HP
-\fB\-maxreceivebuffer=\fR<n>
-.IP
-Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
-.HP
-\fB\-maxsendbuffer=\fR<n>
-.IP
-Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
-.HP
-\fB\-maxtimeadjustment\fR
-.IP
-Maximum allowed median peer time offset adjustment. Local perspective of
-time may be influenced by peers forward or backward by this
-amount. (default: 4200 seconds)
-.HP
-\fB\-maxuploadtarget=\fR<n>
-.IP
-Tries to keep outbound traffic under the given target (in MiB per 24h),
-0 = no limit (default: 0)
-.HP
-\fB\-onion=\fR<ip:port>
-.IP
-Use separate SOCKS5 proxy to reach peers via Tor hidden services, set
-\fB\-noonion\fR to disable (default: \fB\-proxy\fR)
-.HP
-\fB\-onlynet=\fR<net>
-.IP
-Make outgoing connections only through network <net> (ipv4, ipv6 or
-onion). Incoming connections are not affected by this option.
-This option can be specified multiple times to allow multiple
-networks.
-.HP
-\fB\-peerbloomfilters\fR
-.IP
-Support filtering of blocks and transaction with bloom filters (default:
-1)
-.HP
-\fB\-permitbaremultisig\fR
-.IP
-Relay non\-P2SH multisig (default: 1)
-.HP
-\fB\-port=\fR<port>
-.IP
-Listen for connections on <port> (default: 8333, testnet: 18333,
-regtest: 18444)
-.HP
-\fB\-proxy=\fR<ip:port>
-.IP
-Connect through SOCKS5 proxy, set \fB\-noproxy\fR to disable (default:
-disabled)
-.HP
-\fB\-proxyrandomize\fR
-.IP
-Randomize credentials for every proxy connection. This enables Tor
-stream isolation (default: 1)
-.HP
-\fB\-seednode=\fR<ip>
-.IP
-Connect to a node to retrieve peer addresses, and disconnect. This
-option can be specified multiple times to connect to multiple
-nodes.
-.HP
-\fB\-timeout=\fR<n>
-.IP
-Specify connection timeout in milliseconds (minimum: 1, default: 5000)
-.HP
-\fB\-torcontrol=\fR<ip>:<port>
-.IP
-Tor control port to use if onion listening enabled (default:
-127.0.0.1:9051)
-.HP
-\fB\-torpassword=\fR<pass>
-.IP
-Tor control port password (default: empty)
-.HP
-\fB\-upnp\fR
-.IP
-Use UPnP to map the listening port (default: 0)
-.HP
-\fB\-whitebind=\fR<addr>
-.IP
-Bind to given address and whitelist peers connecting to it. Use
-[host]:port notation for IPv6
-.HP
-\fB\-whitelist=\fR<IP address or network>
-.IP
-Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or
-CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple
-times. Whitelisted peers cannot be DoS banned and their
-transactions are always relayed, even if they are already in the
-mempool, useful e.g. for a gateway
-.PP
-Wallet options:
-.HP
-\fB\-addresstype\fR
-.IP
-What type of addresses to use ("legacy", "p2sh\-segwit", or "bech32",
-default: "p2sh\-segwit")
-.HP
-\fB\-avoidpartialspends\fR
-.IP
-Group outputs by address, selecting all or none, instead of selecting on
-a per\-output basis. Privacy is improved as an address is only
-used once (unless someone sends to it after spending from it),
-but may result in slightly higher fees as suboptimal coin
-selection may result due to the added limitation (default: 0)
-.HP
-\fB\-changetype\fR
-.IP
-What type of change to use ("legacy", "p2sh\-segwit", or "bech32").
-Default is same as \fB\-addresstype\fR, except when
-\fB\-addresstype\fR=\fI\,p2sh\-segwit\/\fR a native segwit output is used when
-sending to a native segwit address)
-.HP
-\fB\-disablewallet\fR
-.IP
-Do not load the wallet and disable wallet RPC calls
-.HP
-\fB\-discardfee=\fR<amt>
-.IP
-The fee rate (in BTC/kB) that indicates your tolerance for discarding
-change by adding it to the fee (default: 0.0001). Note: An output
-is discarded if it is dust at this rate, but we will always
-discard up to the dust relay fee and a discard fee above that is
-limited by the fee estimate for the longest target
-.HP
-\fB\-fallbackfee=\fR<amt>
-.IP
-A fee rate (in BTC/kB) that will be used when fee estimation has
-insufficient data (default: 0.0002)
-.HP
-\fB\-keypool=\fR<n>
-.IP
-Set key pool size to <n> (default: 1000)
-.HP
-\fB\-mintxfee=\fR<amt>
-.IP
-Fees (in BTC/kB) smaller than this are considered zero fee for
-transaction creation (default: 0.00001)
-.HP
-\fB\-paytxfee=\fR<amt>
-.IP
-Fee (in BTC/kB) to add to transactions you send (default: 0.00)
-.HP
-\fB\-rescan\fR
-.IP
-Rescan the block chain for missing wallet transactions on startup
-.HP
-\fB\-salvagewallet\fR
-.IP
-Attempt to recover private keys from a corrupt wallet on startup
-.HP
-\fB\-spendzeroconfchange\fR
-.IP
-Spend unconfirmed change when sending transactions (default: 1)
-.HP
-\fB\-txconfirmtarget=\fR<n>
-.IP
-If paytxfee is not set, include enough fee so transactions begin
-confirmation on average within n blocks (default: 6)
-.HP
-\fB\-upgradewallet\fR
-.IP
-Upgrade wallet to latest format on startup
-.HP
-\fB\-wallet=\fR<path>
-.IP
-Specify wallet database path. Can be specified multiple times to load
-multiple wallets. Path is interpreted relative to <walletdir> if
-it is not absolute, and will be created if it does not exist (as
-a directory containing a wallet.dat file and log files). For
-backwards compatibility this will also accept names of existing
-data files in <walletdir>.)
-.HP
-\fB\-walletbroadcast\fR
-.IP
-Make the wallet broadcast transactions (default: 1)
-.HP
-\fB\-walletdir=\fR<dir>
-.IP
-Specify directory to hold wallets (default: <datadir>/wallets if it
-exists, otherwise <datadir>)
-.HP
-\fB\-walletnotify=\fR<cmd>
-.IP
-Execute command when a wallet transaction changes (%s in cmd is replaced
-by TxID)
-.HP
-\fB\-walletrbf\fR
-.IP
-Send transactions with full\-RBF opt\-in enabled (RPC only, default: 0)
-.HP
-\fB\-zapwallettxes=\fR<mode>
-.IP
-Delete all wallet transactions and only recover those parts of the
-blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
-payment request information, 2 = drop tx meta data)
-.PP
-ZeroMQ notification options:
-.HP
-\fB\-zmqpubhashblock=\fR<address>
-.IP
-Enable publish hash block in <address>
-.HP
-\fB\-zmqpubhashtx=\fR<address>
-.IP
-Enable publish hash transaction in <address>
-.HP
-\fB\-zmqpubrawblock=\fR<address>
-.IP
-Enable publish raw block in <address>
-.HP
-\fB\-zmqpubrawtx=\fR<address>
-.IP
-Enable publish raw transaction in <address>
-.PP
-Debugging/Testing options:
-.HP
-\fB\-debug=\fR<category>
-.IP
-Output debugging information (default: \fB\-nodebug\fR, supplying <category> is
-optional). If <category> is not supplied or if <category> = 1,
-output all debugging information. <category> can be: net, tor,
-mempool, http, bench, zmq, db, rpc, estimatefee, addrman,
-selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej,
-libevent, coindb, qt, leveldb.
-.HP
-\fB\-debugexclude=\fR<category>
-.IP
-Exclude debugging information for a category. Can be used in conjunction
-with \fB\-debug\fR=\fI\,1\/\fR to output debug logs for all categories except one
-or more specified categories.
-.HP
-\fB\-help\-debug\fR
-.IP
-Print help message with debugging options and exit
-.HP
-\fB\-logips\fR
-.IP
-Include IP addresses in debug output (default: 0)
-.HP
-\fB\-logtimestamps\fR
-.IP
-Prepend debug output with timestamp (default: 1)
-.HP
-\fB\-maxtxfee=\fR<amt>
-.IP
-Maximum total fees (in BTC) to use in a single wallet transaction or raw
-transaction; setting this too low may abort large transactions
-(default: 0.10)
-.HP
-\fB\-printtoconsole\fR
-.IP
-Send trace/debug info to console (default: 1 when no \fB\-daemon\fR. To disable
-logging to file, set \fB\-nodebuglogfile\fR)
-.HP
-\fB\-shrinkdebugfile\fR
-.IP
-Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
-.HP
-\fB\-uacomment=\fR<cmt>
-.IP
-Append comment to the user agent string
-.PP
-Chain selection options:
-.HP
-\fB\-testnet\fR
-.IP
-Use the test chain
-.PP
-Node relay options:
-.HP
-\fB\-bytespersigop\fR
-.IP
-Equivalent bytes per sigop in transactions for relay and mining
-(default: 20)
-.HP
-\fB\-datacarrier\fR
-.IP
-Relay and mine data carrier transactions (default: 1)
-.HP
-\fB\-datacarriersize\fR
-.IP
-Maximum size of data in data carrier transactions we relay and mine
-(default: 83)
-.HP
-\fB\-minrelaytxfee=\fR<amt>
-.IP
-Fees (in BTC/kB) smaller than this are considered zero fee for relaying,
-mining and transaction creation (default: 0.00001)
-.HP
-\fB\-whitelistforcerelay\fR
-.IP
-Force relay of transactions from whitelisted peers even if they violate
-local relay policy (default: 0)
-.HP
-\fB\-whitelistrelay\fR
-.IP
-Accept relayed transactions received from whitelisted peers even when
-not relaying transactions (default: 1)
-.PP
-Block creation options:
-.HP
-\fB\-blockmaxweight=\fR<n>
-.IP
-Set maximum BIP141 block weight (default: 3996000)
-.HP
-\fB\-blockmintxfee=\fR<amt>
-.IP
-Set lowest fee rate (in BTC/kB) for transactions to be included in block
-creation. (default: 0.00001)
-.PP
-RPC server options:
-.HP
-\fB\-rest\fR
-.IP
-Accept public REST requests (default: 0)
-.HP
-\fB\-rpcallowip=\fR<ip>
-.IP
-Allow JSON\-RPC connections from specified source. Valid for <ip> are a
-single IP (e.g. 1.2.3.4), a network/netmask (e.g.
-1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This
-option can be specified multiple times
-.HP
-\fB\-rpcauth=\fR<userpw>
-.IP
-Username and HMAC\-SHA\-256 hashed password for JSON\-RPC connections. The
-field <userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A
-canonical python script is included in share/rpcauth. The client
-then connects normally using the
-rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This
-option can be specified multiple times
-.HP
-\fB\-rpcbind=\fR<addr>[:port]
-.IP
-Bind to given address to listen for JSON\-RPC connections. Do not expose
-the RPC server to untrusted networks such as the public internet!
-This option is ignored unless \fB\-rpcallowip\fR is also passed. Port is
-optional and overrides \fB\-rpcport\fR. Use [host]:port notation for
-IPv6. This option can be specified multiple times (default:
-127.0.0.1 and ::1 i.e., localhost)
-.HP
-\fB\-rpccookiefile=\fR<loc>
-.IP
-Location of the auth cookie. Relative paths will be prefixed by a
-net\-specific datadir location. (default: data dir)
-.HP
-\fB\-rpcpassword=\fR<pw>
-.IP
-Password for JSON\-RPC connections
-.HP
-\fB\-rpcport=\fR<port>
-.IP
-Listen for JSON\-RPC connections on <port> (default: 8332, testnet:
-18332, regtest: 18443)
-.HP
-\fB\-rpcserialversion\fR
-.IP
-Sets the serialization of raw transaction or block hex returned in
-non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1)
-.HP
-\fB\-rpcthreads=\fR<n>
-.IP
-Set the number of threads to service RPC calls (default: 4)
-.HP
-\fB\-rpcuser=\fR<user>
-.IP
-Username for JSON\-RPC connections
-.HP
-\fB\-server\fR
-.IP
-Accept command line and JSON\-RPC commands
-.SH COPYRIGHT
-Copyright (C) 2009-2019 The Bitcoin Core developers
+bitcoind \- manual page for bitcoind
-Please contribute if you find Bitcoin Core useful. Visit
-<https://bitcoincore.org> for further information about the software.
-The source code is available from <https://github.com/bitcoin/bitcoin>.
-
-This is experimental software.
-Distributed under the MIT software license, see the accompanying file COPYING
-or <https://opensource.org/licenses/MIT>
+This is a placefolder file. Please follow the instructions in \fIcontrib/devtools/README.md\fR to generate the manual pages after a release.
diff --git a/doc/release-notes-19776.md b/doc/release-notes-19776.md
new file mode 100644
index 0000000000..5553c5a7bd
--- /dev/null
+++ b/doc/release-notes-19776.md
@@ -0,0 +1,9 @@
+Updated RPCs
+------------
+
+- The `getpeerinfo` RPC returns two new boolean fields, `bip152_hb_to` and
+ `bip152_hb_from`, that respectively indicate whether we selected a peer to be
+ in compact blocks high-bandwidth mode or whether a peer selected us as a
+ compact blocks high-bandwidth peer. High-bandwidth peers send new block
+ announcements via a `cmpctblock` message rather than the usual inv/headers
+ announcements. See BIP 152 for more details. (#19776)
diff --git a/doc/release-notes-19988.md b/doc/release-notes-19988.md
deleted file mode 100644
index ef26eb3032..0000000000
--- a/doc/release-notes-19988.md
+++ /dev/null
@@ -1,9 +0,0 @@
-P2P changes
------------
-
-The size of the set of transactions that peers have announced and we consider
-for requests has been reduced from 100000 to 5000 (per peer), and further
-announcements will be ignored when that limit is reached. If you need to
-dump (very) large batches of transactions, exceptions can be made for trusted
-peers using the "relay" network permission. For localhost for example it can
-be enabled using the command line option `-whitelist=relay@127.0.0.1`.
diff --git a/doc/release-notes.md b/doc/release-notes.md
index 65726f3d5d..f286a4493b 100644
--- a/doc/release-notes.md
+++ b/doc/release-notes.md
@@ -45,426 +45,61 @@ wallet versions of Bitcoin Core are generally supported.
Compatibility
==============
-During this release cycle, work has been done to ensure that the codebase is fully
-compatible with C++17. The intention is to begin using C++17 features starting
-with the 0.22.0 release. This means that a compiler that supports C++17 will be
-required to compile 0.22.0.
-
Bitcoin Core is supported and extensively tested on operating systems
-using the Linux kernel, macOS 10.12+, and Windows 7 and newer. Bitcoin
+using the Linux kernel, macOS 10.14+, and Windows 7 and newer. Bitcoin
Core should also work on most other Unix-like systems but is not as
frequently tested on them. It is not recommended to use Bitcoin Core on
unsupported systems.
-From Bitcoin Core 0.20.0 onwards, macOS versions earlier than 10.12 are no
+From Bitcoin Core 0.22.0 onwards, macOS versions earlier than 10.14 are no
longer supported. Additionally, Bitcoin Core does not yet change appearance
when macOS "dark mode" is activated.
-The node's known peers are persisted to disk in a file called `peers.dat`. The
-format of this file has been changed in a backwards-incompatible way in order to
-accommodate the storage of Tor v3 and other BIP155 addresses. This means that if
-the file is modified by 0.21.0 or newer then older versions will not be able to
-read it. Those old versions, in the event of a downgrade, will log an error
-message that deserialization has failed and will continue normal operation
-as if the file was missing, creating a new empty one. (#19954)
-
Notable changes
===============
P2P and network changes
-----------------------
-- The mempool now tracks whether transactions submitted via the wallet or RPCs
- have been successfully broadcast. Every 10-15 minutes, the node will try to
- announce unbroadcast transactions until a peer requests it via a `getdata`
- message or the transaction is removed from the mempool for other reasons.
- The node will not track the broadcast status of transactions submitted to the
- node using P2P relay. This version reduces the initial broadcast guarantees
- for wallet transactions submitted via P2P to a node running the wallet. (#18038)
-
-- The Tor onion service that is automatically created by setting the
- `-listenonion` configuration parameter will now be created as a Tor v3 service
- instead of Tor v2. The private key that was used for Tor v2 (if any) will be
- left untouched in the `onion_private_key` file in the data directory (see
- `-datadir`) and can be removed if not needed. Bitcoin Core will no longer
- attempt to read it. The private key for the Tor v3 service will be saved in a
- file named `onion_v3_private_key`. To use the deprecated Tor v2 service (not
- recommended), then `onion_private_key` can be copied over
- `onion_v3_private_key`, e.g.
- `cp -f onion_private_key onion_v3_private_key`. (#19954)
-
Updated RPCs
------------
-- The `getpeerinfo` RPC now has additional `last_block` and `last_transaction`
- fields that return the UNIX epoch time of the last block and the last valid
- transaction received from each peer. (#19731)
-
-- `getnetworkinfo` now returns two new fields, `connections_in` and
- `connections_out`, that provide the number of inbound and outbound peer
- connections. These new fields are in addition to the existing `connections`
- field, which returns the total number of peer connections. (#19405)
-
-- Exposed transaction version numbers are now treated as unsigned 32-bit
- integers instead of signed 32-bit integers. This matches their treatment in
- consensus logic. Versions greater than 2 continue to be non-standard
- (matching previous behavior of smaller than 1 or greater than 2 being
- non-standard). Note that this includes the joinpsbt command, which combines
- partially-signed transactions by selecting the highest version number.
- (#16525)
-
-- `getmempoolinfo` now returns an additional `unbroadcastcount` field. The
- mempool tracks locally submitted transactions until their initial broadcast
- is acknowledged by a peer. This field returns the count of transactions
- waiting for acknowledgement.
-
-- Mempool RPCs such as `getmempoolentry` and `getrawmempool` with
- `verbose=true` now return an additional `unbroadcast` field. This indicates
- whether initial broadcast of the transaction has been acknowledged by a
- peer. `getmempoolancestors` and `getmempooldescendants` are also updated.
-
-- The `bumpfee`, `fundrawtransaction`, `sendmany`, `sendtoaddress`, and `walletcreatefundedpsbt`
-RPC commands have been updated to include two new fee estimation methods "BTC/kB" and "sat/B".
-The target is the fee expressed explicitly in the given form. Note that use of this feature
-will trigger BIP 125 (replace-by-fee) opt-in. (#11413)
-
-- In addition, the `estimate_mode` parameter is now case insensitive for all of
- the above RPC commands. (#11413)
-
-- The `bumpfee` command now uses `conf_target` rather than `confTarget` in the
- options. (#11413)
-
-- The `getpeerinfo` RPC no longer returns the `banscore` field unless the configuration
- option `-deprecatedrpc=banscore` is used. The `banscore` field will be fully
- removed in the next major release. (#19469)
-
-- The `testmempoolaccept` RPC returns `vsize` and a `fees` object with the `base` fee
- if the transaction would pass validation. (#19940)
-
-- The `getpeerinfo` RPC now returns a `connection_type` field. This indicates
- the type of connection established with the peer. It will return one of six
- options. For more information, see the `getpeerinfo` help documentation.
- (#19725)
-
-- The `getpeerinfo` RPC no longer returns the `addnode` field by default. This
- field will be fully removed in the next major release. It can be accessed
- with the configuration option `-deprecatedrpc=getpeerinfo_addnode`. However,
- it is recommended to instead use the `connection_type` field (it will return
- `manual` when addnode is true). (#19725)
-
-- The `walletcreatefundedpsbt` RPC call will now fail with
- `Insufficient funds` when inputs are manually selected but are not enough to cover
- the outputs and fee. Additional inputs can automatically be added through the
- new `add_inputs` option. (#16377)
-
-- The `fundrawtransaction` RPC now supports `add_inputs` option that when `false`
- prevents adding more inputs if necessary and consequently the RPC fails.
-
Changes to Wallet or GUI related RPCs can be found in the GUI or Wallet section below.
New RPCs
--------
-- The `getindexinfo` RPC returns the actively running indices of the node,
- including their current sync status and height. It also accepts an `index_name`
- to specify returning only the status of that index. (#19550)
-
Build System
------------
+New settings
+------------
+
Updated settings
----------------
-- The same ZeroMQ notification (e.g. `-zmqpubhashtx=address`) can now be
- specified multiple times to publish the same notification to different ZeroMQ
- sockets. (#18309)
-
-- The `-banscore` configuration option, which modified the default threshold for
- disconnecting and discouraging misbehaving peers, has been removed as part of
- changes in 0.20.1 and in this release to the handling of misbehaving peers.
- Refer to "Changes regarding misbehaving peers" in the 0.20.1 release notes for
- details. (#19464)
-
-- The `-debug=db` logging category, which was deprecated in 0.20 and replaced by
- `-debug=walletdb` to distinguish it from `coindb`, has been removed. (#19202)
+Changes to Wallet or GUI related settings can be found in the GUI or Wallet section below.
-- A `download` permission has been extracted from the `noban` permission. For
- compatibility, `noban` implies the `download` permission, but this may change
- in future releases. Refer to the help of the affected settings `-whitebind`
- and `-whitelist` for more details. (#19191)
-
-- Netmasks that contain 1-bits after 0-bits (the 1-bits are not contiguous on
- the left side, e.g. 255.0.255.255) are no longer accepted. They are invalid
- according to RFC 4632. Netmasks are used in the `-rpcallowip` and `-whitelist`
- configuration options and in the `setban` RPC. (#19628)
-
-Changes to Wallet or GUI related settings can be found in the GUI or Wallet section below.
+- Passing an invalid `-rpcauth` argument now cause bitcoind to fail to start. (#20461)
Tools and Utilities
-------------------
-- The `connections` field of `bitcoin-cli -getinfo` is expanded to return a JSON
- object with `in`, `out` and `total` numbers of peer connections. It previously
- returned a single integer value for the total number of peer connections. (#19405)
-
-- A new `bitcoin-cli -generate` command, equivalent to RPC `generatenewaddress`
- followed by `generatetoaddress`, can generate blocks for command line testing
- purposes. This is a client-side version of the
- former `generate` RPC. See the help for details. (#19133)
-
-- The `bitcoin-cli -getinfo` command now displays the wallet name and balance for
- each of the loaded wallets when more than one is loaded (e.g. in multiwallet
- mode) and a wallet is not specified with `-rpcwallet`. (#18594)
-
-New settings
-------------
-
-- The `startupnotify` option is used to specify a command to
- execute when Bitcoin Core has finished with its startup
- sequence. (#15367)
-
Wallet
------
-- Backwards compatibility has been dropped for two `getaddressinfo` RPC
- deprecations, as notified in the 0.20 release notes. The deprecated `label`
- field has been removed as well as the deprecated `labels` behavior of
- returning a JSON object containing `name` and `purpose` key-value pairs. Since
- 0.20, the `labels` field returns a JSON array of label names. (#19200)
-
-- To improve wallet privacy, the frequency of wallet rebroadcast attempts is
- reduced from approximately once every 15 minutes to once every 12-36 hours.
- To maintain a similar level of guarantee for initial broadcast of wallet
- transactions, the mempool tracks these transactions as a part of the newly
- introduced unbroadcast set. See the "P2P and network changes" section for
- more information on the unbroadcast set. (#18038)
-
-- The `sendtoaddress` and `sendmany` RPCs accept an optional `verbose=True`
- argument to also return the fee reason about the sent tx. (#19501)
-
-- The wallet can create a transaction without change even when the keypool is
- empty. Previously it failed. (#17219)
-
-- The `-salvagewallet` startup option has been removed. A new `salvage` command
- has been added to the `bitcoin-wallet` tool which performs the salvage
- operations that `-salvagewallet` did. (#18918)
-
-- A new configuration flag `-maxapsfee` has been added, which sets the max
- allowed avoid partial spends (APS) fee. It defaults to 0 (i.e. fee is the
- same with and without APS). Setting it to -1 will disable APS, unless
- `-avoidpartialspends` is set. (#14582)
-
-- The wallet will now avoid partial spends (APS) by default, if this does not
- result in a difference in fees compared to the non-APS variant. The allowed
- fee threshold can be adjusted using the new `-maxapsfee` configuration
- option. (#14582)
-
-- The `createwallet`, `loadwallet`, and `unloadwallet` RPCs now accept
- `load_on_startup` options to modify the settings list. Unless these options
- are explicitly set to true or false, the list is not modified, so the RPC
- methods remain backwards compatible. (#15937)
-
-- A new `send` RPC with similar syntax to `walletcreatefundedpsbt`, including
- support for coin selection and a custom fee rate. The `send` RPC is
- experimental and may change in subsequent releases. Using it is encouraged
- once it's no longer experimental: `sendmany` and `sendtoaddress` may be
- deprecated in a future release. (#16378)
-
-- `fundrawtransaction` and `walletcreatefundedpsbt` when used with the
- `lockUnspents` argument now lock manually selected coins, in addition to
- automatically selected coins. Note that locked coins are never used in
- automatic coin selection, but can still be manually selected. (#18244)
-
-- The `-zapwallettxes` startup option has been removed and its functionality
- removed from the wallet. This option was originally intended to allow for
- the fee bumping of transactions that did not signal RBF. This functionality
- has been superseded with the abandon transaction feature. (#19671)
-
-- The error code when no wallet is loaded, but a wallet RPC is called, has been
- changed from `-32601` (method not found) to `-18` (wallet not found).
- (#20101)
-
-### Default Wallet
-
-Bitcoin Core will no longer create an unnamed `""` wallet by default when no
-wallet is specified on the command line or in the configuration files. For
-backwards compatibility, if an unnamed `""` wallet already exists and would
-have been loaded previously, then it will still be loaded. Users without an
-unnamed `""` wallet and without any other wallets to be loaded on startup will
-be prompted to either choose a wallet to load, or to create a new wallet.
-(#15454)
-
-### Experimental Descriptor Wallets
-
-Please note that Descriptor Wallets are still experimental and not all expected functionality
-is available. Additionally there may be some bugs and current functions may change in the future.
-Bugs and missing functionality can be reported to the [issue tracker](https://github.com/bitcoin/bitcoin/issues).
-
-0.21 introduces a new type of wallet - Descriptor Wallets. Descriptor Wallets store
-scriptPubKey information using descriptors. This is in contrast to the Legacy Wallet
-structure where keys are used to generate scriptPubKeys and addresses. Because of this
-shift to being script based instead of key based, many of the confusing things that Legacy
-Wallets do are not possible with Descriptor Wallets. Descriptor Wallets use a definition
-of "mine" for scripts which is simpler and more intuitive than that used by Legacy Wallets.
-Descriptor Wallets also uses different semantics for watch-only things and imports.
-
-As Descriptor Wallets are a new type of wallet, their introduction does not affect existing wallets.
-Users who already have a Bitcoin Core wallet can continue to use it as they did before without
-any change in behavior. Newly created Legacy Wallets (which is the default type of wallet) will
-behave as they did in previous versions of Bitcoin Core.
-
-The differences between Descriptor Wallets and Legacy Wallets are largely limited to non user facing
-things. They are intended to behave similarly except for the import/export and watchonly functionality
-as described below.
-
-#### Creating Descriptor Wallets
-
-Descriptor Wallets are not created by default. They must be explicitly created using the
-`createwallet` RPC or via the GUI. A `descriptors` option has been added to `createwallet`.
-Setting `descriptors` to `true` will create a Descriptor Wallet instead of a Legacy Wallet.
-
-In the GUI, a checkbox has been added to the Create Wallet Dialog to indicate that a
-Descriptor Wallet should be created.
-
-Without those options being set, a Legacy Wallet will be created instead. Additionally the
-Default Wallet created upon first startup of Bitcoin Core will be a Legacy Wallet.
-
-#### `IsMine` Semantics
-
-`IsMine` refers to the function used to determine whether a script belongs to the wallet.
-This is used to determine whether an output belongs to the wallet. `IsMine` in Legacy Wallets
-returns true if the wallet would be able to sign an input that spends an output with that script.
-Since keys can be involved in a variety of different scripts, this definition for `IsMine` can
-lead to many unexpected scripts being considered part of the wallet.
-
-With Descriptor Wallets, descriptors explicitly specify the set of scripts that are owned by
-the wallet. Since descriptors are deterministic and easily enumerable, users will know exactly
-what scripts the wallet will consider to belong to it. Additionally the implementation of `IsMine`
-in Descriptor Wallets is far simpler than for Legacy Wallets. Notably, in Legacy Wallets, `IsMine`
-allowed for users to take one type of address (e.g. P2PKH), mutate it into another address type
-(e.g. P2WPKH), and the wallet would still detect outputs sending to the new address type
-even without that address being requested from the wallet. Descriptor Wallets does not
-allow for this and will only watch for the addresses that were explicitly requested from the wallet.
-
-These changes to `IsMine` will make it easier to reason about what scripts the wallet will
-actually be watching for in outputs. However for the vast majority of users, this change is
-largely transparent and will not have noticeable effect.
-
-#### Imports and Exports
-
-In Legacy Wallets, raw scripts and keys could be imported to the wallet. Those imported scripts
-and keys are treated separately from the keys generated by the wallet. This complicates the `IsMine`
-logic as it has to distinguish between spendable and watchonly.
-
-Descriptor Wallets handle importing scripts and keys differently. Only complete descriptors can be
-imported. These descriptors are then added to the wallet as if it were a descriptor generated by
-the wallet itself. This simplifies the `IsMine` logic so that it no longer has to distinguish
-between spendable and watchonly. As such, the watchonly model for Descriptor Wallets is also
-different and described in more detail in the next section.
-
-To import into a Descriptor Wallet, a new `importdescriptors` RPC has been added that uses a syntax
-similar to that of `importmulti`.
-
-As Legacy Wallets and Descriptor Wallets use different mechanisms for storing and importing scripts and keys
-the existing import RPCs have been disabled for descriptor wallets.
-New export RPCs for Descriptor Wallets have not yet been added.
-
-The following RPCs are disabled for Descriptor Wallets:
-
-* importprivkey
-* importpubkey
-* importaddress
-* importwallet
-* dumpprivkey
-* dumpwallet
-* importmulti
-* addmultisigaddress
-* sethdseed
-
-#### Watchonly Wallets
-
-A Legacy Wallet contains both private keys and scripts that were being watched.
-Those watched scripts would not contribute to your normal balance. In order to see the watchonly
-balance and to use watchonly things in transactions, an `include_watchonly` option was added
-to many RPCs that would allow users to do that. However it is easy to forget to include this option.
-
-Descriptor Wallets move to a per-wallet watchonly model. Instead an entire wallet is considered to be
-watchonly depending on whether it was created with private keys disabled. This eliminates the need
-to distinguish between things that are watchonly and things that are not within a wallet itself.
-
-This change does have a caveat. If a Descriptor Wallet with private keys *enabled* has
-a multiple key descriptor without all of the private keys (e.g. `multi(...)` with only one private key),
-then the wallet will fail to sign and broadcast transactions. Such wallets would need to use the PSBT
-workflow but the typical GUI Send, `sendtoaddress`, etc. workflows would still be available, just
-non-functional.
-
-This issue is worsened if the wallet contains both single key (e.g. `wpkh(...)`) descriptors and such
-multiple key descriptors as some transactions could be signed and broadast and others not. This is
-due to some transactions containing only single key inputs, while others would contain both single
-key and multiple key inputs, depending on which are available and how the coin selection algorithm
-selects inputs. However this is not considered to be a supported use case; multisigs
-should be in their own wallets which do not already have descriptors. Although users cannot export
-descriptors with private keys for now as explained earlier.
-
-#### BIP 44/49/84 Support
-
-The change to using descriptors changes the default derivation paths used by Bitcoin Core
-to adhere to BIP 44/49/84. Descriptors with different derivation paths can be imported without
-issue.
-
-### Wallet RPC changes
-
-- The `upgradewallet` RPC replaces the `-upgradewallet` command line option.
- (#15761)
-- The `settxfee` RPC will fail if the fee was set higher than the `-maxtxfee`
- command line setting. The wallet will already fail to create transactions
- with fees higher than `-maxtxfee`. (#18467)
-
GUI changes
-----------
-- Wallets created or loaded in the GUI will now be automatically loaded on
- startup, so they don't need to be manually reloaded next time Bitcoin Core is
- started. The list of wallets to load on startup is stored in
- `\<datadir\>/settings.json` and augments any command line or `bitcoin.conf`
- `-wallet=` settings that specify more wallets to load. Wallets that are
- unloaded in the GUI get removed from the settings list so they won't load
- again automatically next startup. (#19754)
-
-- The GUI Peers window no longer displays a "Ban Score" field. This is part of
- changes in 0.20.1 and in this release to the handling of misbehaving
- peers. Refer to "Changes regarding misbehaving peers" in the 0.20.1 release
- notes for details. (#19512)
-
Low-level changes
=================
RPC
---
-- To make RPC `sendtoaddress` more consistent with `sendmany` the following error
- `sendtoaddress` codes were changed from `-4` to `-6`:
- - Insufficient funds
- - Fee estimation failed
- - Transaction has too long of a mempool chain
-
-- The `sendrawtransaction` error code for exceeding `maxfeerate` has been changed from
- `-26` to `-25`. The error string has been changed from "absurdly-high-fee" to
- "Fee exceeds maximum configured by user (e.g. -maxtxfee, maxfeerate)." The
- `testmempoolaccept` RPC returns `max-fee-exceeded` rather than `absurdly-high-fee`
- as the `reject-reason`. (#19339)
-
-- To make wallet and rawtransaction RPCs more consistent, the error message for
- exceeding maximum feerate has been changed to "Fee exceeds maximum configured by user
- (e.g. -maxtxfee, maxfeerate)." (#19339)
-
Tests
-----
-- The BIP 325 default signet can be enabled by the `-chain=signet` or `-signet`
- setting. The settings `-signetchallenge` and `-signetseednode` allow
- enabling a custom signet.
-
Credits
=======
diff --git a/doc/release-process.md b/doc/release-process.md
index a61b67c35f..cedb36d51d 100644
--- a/doc/release-process.md
+++ b/doc/release-process.md
@@ -18,20 +18,20 @@ Release Process
### Before every major release
* On both the master branch and the new release branch:
- - update `CLIENT_VERSION_MINOR` in [`configure.ac`](../configure.ac)
- - update `CLIENT_VERSION_MINOR`, `PACKAGE_VERSION`, and `PACKAGE_STRING` in [`build_msvc/bitcoin_config.h`](/build_msvc/bitcoin_config.h)
+ - update `CLIENT_VERSION_MAJOR` in [`configure.ac`](../configure.ac)
+ - update `CLIENT_VERSION_MAJOR`, `PACKAGE_VERSION`, and `PACKAGE_STRING` in [`build_msvc/bitcoin_config.h`](/build_msvc/bitcoin_config.h)
* On the new release branch in [`configure.ac`](../configure.ac) and [`build_msvc/bitcoin_config.h`](/build_msvc/bitcoin_config.h) (see [this commit](https://github.com/bitcoin/bitcoin/commit/742f7dd)):
- - set `CLIENT_VERSION_REVISION` to `0`
+ - set `CLIENT_VERSION_MINOR` to `0`
+ - set `CLIENT_VERSION_BUILD` to `0`
- set `CLIENT_VERSION_IS_RELEASE` to `true`
#### Before branch-off
* Update hardcoded [seeds](/contrib/seeds/README.md), see [this pull request](https://github.com/bitcoin/bitcoin/pull/7415) for an example.
-* Update [`src/chainparams.cpp`](/src/chainparams.cpp) m_assumed_blockchain_size and m_assumed_chain_state_size with the current size plus some overhead (see [this](#how-to-calculate-m_assumed_blockchain_size-and-m_assumed_chain_state_size) for information on how to calculate them).
-* Update `src/chainparams.cpp` chainTxData with statistics about the transaction count and rate. Use the output of the RPC `getchaintxstats`, see
- [this pull request](https://github.com/bitcoin/bitcoin/pull/17002) for an example. Reviewers can verify the results by running `getchaintxstats <window_block_count> <window_last_block_hash>` with the `window_block_count` and `window_last_block_hash` from your output.
-* Update `src/chainparams.cpp` nMinimumChainWork with information from the getblockchaininfo rpc.
-* Update `src/chainparams.cpp` defaultAssumeValid with information from the getblockhash rpc.
+* Update [`src/chainparams.cpp`](/src/chainparams.cpp) m_assumed_blockchain_size and m_assumed_chain_state_size with the current size plus some overhead (see [this](#how-to-calculate-assumed-blockchain-and-chain-state-size) for information on how to calculate them).
+* Update [`src/chainparams.cpp`](/src/chainparams.cpp) chainTxData with statistics about the transaction count and rate. Use the output of the `getchaintxstats` RPC, see
+ [this pull request](https://github.com/bitcoin/bitcoin/pull/20263) for an example. Reviewers can verify the results by running `getchaintxstats <window_block_count> <window_final_block_hash>` with the `window_block_count` and `window_final_block_hash` from your output.
+* Update `src/chainparams.cpp` nMinimumChainWork and defaultAssumeValid (and the block height comment) with information from the `getblockheader` (and `getblockhash`) RPCs.
- The selected value must not be orphaned so it may be useful to set the value two blocks back from the tip.
- Testnet should be set some tens of thousands back from the tip due to reorgs there.
- This update should be reviewed with a reindex-chainstate with assumevalid=0 to catch any defect
@@ -371,7 +371,7 @@ bitcoin.org (see below for bitcoin.org update instructions).
### Additional information
-#### How to calculate `m_assumed_blockchain_size` and `m_assumed_chain_state_size`
+#### <a name="how-to-calculate-assumed-blockchain-and-chain-state-size"></a>How to calculate `m_assumed_blockchain_size` and `m_assumed_chain_state_size`
Both variables are used as a guideline for how much space the user needs on their drive in total, not just strictly for the blockchain.
Note that all values should be taken from a **fully synced** node and have an overhead of 5-10% added on top of its base value.
diff --git a/doc/shared-libraries.md b/doc/shared-libraries.md
index e960863a80..147e223711 100644
--- a/doc/shared-libraries.md
+++ b/doc/shared-libraries.md
@@ -41,9 +41,10 @@ The interface is defined in the C header `bitcoinconsensus.h` located in `src/sc
- `bitcoinconsensus_ERR_TX_SIZE_MISMATCH` - `txToLen` did not match with the size of `txTo`
- `bitcoinconsensus_ERR_DESERIALIZE` - An error deserializing `txTo`
- `bitcoinconsensus_ERR_AMOUNT_REQUIRED` - Input amount is required if WITNESS is used
+- `bitcoinconsensus_ERR_INVALID_FLAGS` - Script verification `flags` are invalid (i.e. not part of the libconsensus interface)
### Example Implementations
-- [NBitcoin](https://github.com/NicolasDorier/NBitcoin/blob/master/NBitcoin/Script.cs#L814) (.NET Bindings)
+- [NBitcoin](https://github.com/MetacoSA/NBitcoin/blob/5e1055cd7c4186dee4227c344af8892aea54faec/NBitcoin/Script.cs#L979-#L1031) (.NET Bindings)
- [node-libbitcoinconsensus](https://github.com/bitpay/node-libbitcoinconsensus) (Node.js Bindings)
- [java-libbitcoinconsensus](https://github.com/dexX7/java-libbitcoinconsensus) (Java Bindings)
- [bitcoinconsensus-php](https://github.com/Bit-Wasp/bitcoinconsensus-php) (PHP Bindings)
diff --git a/doc/tor.md b/doc/tor.md
index 34c5f1b5e7..86e5d9ddf3 100644
--- a/doc/tor.md
+++ b/doc/tor.md
@@ -47,7 +47,7 @@ In a typical situation, this suffices to run behind a Tor proxy:
./bitcoind -proxy=127.0.0.1:9050
-## 2. Run a Bitcoin Core hidden server
+## 2. Manually create a Bitcoin Core onion service
If you configure your Tor system accordingly, it is possible to make your node also
reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent
@@ -56,7 +56,6 @@ versions of Tor see [Section 3](#3-automatically-listen-on-tor).*
HiddenServiceDir /var/lib/tor/bitcoin-service/
HiddenServicePort 8333 127.0.0.1:8334
- HiddenServicePort 18333 127.0.0.1:18334
The directory can be different of course, but virtual port numbers should be equal to
your bitcoind's P2P listen port (8333 by default), and target addresses and ports
@@ -107,7 +106,7 @@ for normal IPv4/IPv6 communication, use:
./bitcoind -onion=127.0.0.1:9050 -externalip=7zvj7a2imdgkdbg4f2dryd5rgtrn7upivr5eeij4cicjh65pooxeshid.onion -discover
-## 3. Automatically listen on Tor
+## 3. Automatically create a Bitcoin Core onion service
Starting with Tor version 0.2.7.1 it is possible, through Tor's control socket
API, to create and destroy 'ephemeral' onion services programmatically.
@@ -145,6 +144,6 @@ in the tor configuration file. The hashed password can be obtained with the comm
- Do not add anything but Bitcoin Core ports to the onion service created in section 2.
If you run a web service too, create a new onion service for that.
- Otherwise it is trivial to link them, which may reduce privacy. Hidden
+ Otherwise it is trivial to link them, which may reduce privacy. Onion
services created automatically (as in section 3) always have only one port
open.