mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-13 12:33:42 +02:00
Merge 7e1eca4882 into merged_master (Bitcoin PR bitcoin/bitcoin#33344)
This commit is contained in:
commit
b1125e0120
21 changed files with 2397 additions and 91 deletions
|
|
@ -28,9 +28,9 @@ get_directory_property(precious_variables CACHE_VARIABLES)
|
|||
#=============================
|
||||
set(CLIENT_NAME "Elements Core")
|
||||
set(CLIENT_VERSION_MAJOR 29)
|
||||
set(CLIENT_VERSION_MINOR 1)
|
||||
set(CLIENT_VERSION_MINOR 2)
|
||||
set(CLIENT_VERSION_BUILD 0)
|
||||
set(CLIENT_VERSION_RC 0)
|
||||
set(CLIENT_VERSION_RC 1)
|
||||
set(CLIENT_VERSION_IS_RELEASE "true")
|
||||
set(COPYRIGHT_YEAR "2025")
|
||||
|
||||
|
|
|
|||
|
|
@ -55,10 +55,9 @@ if [ -n "$PIP_PACKAGES" ]; then
|
|||
fi
|
||||
|
||||
if [[ -n "${USE_INSTRUMENTED_LIBCPP}" ]]; then
|
||||
${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-21.1.1" /llvm-project
|
||||
|
||||
if [ -n "${APT_LLVM_V}" ]; then
|
||||
${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-$( clang --version | sed --silent 's@.*clang version \([0-9.]*\).*@\1@p' )" /llvm-project
|
||||
else
|
||||
${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-21.1.0" /llvm-project
|
||||
|
||||
cmake -G Ninja -B /clang_build/ \
|
||||
-DLLVM_ENABLE_PROJECTS="clang" \
|
||||
|
|
|
|||
|
|
@ -36,6 +36,10 @@ if(USDT_INCLUDE_DIR)
|
|||
include(CheckCXXSourceCompiles)
|
||||
set(CMAKE_REQUIRED_INCLUDES ${USDT_INCLUDE_DIR})
|
||||
check_cxx_source_compiles("
|
||||
#if defined(__arm__)
|
||||
# define STAP_SDT_ARG_CONSTRAINT g
|
||||
#endif
|
||||
|
||||
// Setting SDT_USE_VARIADIC lets systemtap (sys/sdt.h) know that we want to use
|
||||
// the optional variadic macros to define tracepoints.
|
||||
#define SDT_USE_VARIADIC 1
|
||||
|
|
|
|||
201
doc/man/bitcoin-cli.1
Normal file
201
doc/man/bitcoin-cli.1
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH BITCOIN-CLI "1" "September 2025" "bitcoin-cli v29.2.0rc1" "User Commands"
|
||||
.SH NAME
|
||||
bitcoin-cli \- manual page for bitcoin-cli v29.2.0rc1
|
||||
.SH SYNOPSIS
|
||||
.B bitcoin-cli
|
||||
[\fI\,options\/\fR] \fI\,<command> \/\fR[\fI\,params\/\fR]
|
||||
.br
|
||||
.B bitcoin-cli
|
||||
[\fI\,options\/\fR] \fI\,-named <command> \/\fR[\fI\,name=value\/\fR]...
|
||||
.br
|
||||
.B bitcoin-cli
|
||||
[\fI\,options\/\fR] \fI\,help\/\fR
|
||||
.br
|
||||
.B bitcoin-cli
|
||||
[\fI\,options\/\fR] \fI\,help <command>\/\fR
|
||||
.SH DESCRIPTION
|
||||
Bitcoin Core RPC client version v29.2.0rc1
|
||||
.PP
|
||||
The bitcoin\-cli utility provides a command line interface to interact with a Bitcoin Core RPC server.
|
||||
.PP
|
||||
It can be used to query network information, manage wallets, create or broadcast transactions, and control the Bitcoin Core server.
|
||||
.PP
|
||||
Use the "help" command to list all commands. Use "help <command>" to show help for that command.
|
||||
The \fB\-named\fR option allows you to specify parameters using the key=value format, eliminating the need to pass unused positional parameters.
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\fB\-color=\fR<when>
|
||||
.IP
|
||||
Color setting for CLI output (default: auto). Valid values: always, auto
|
||||
(add color codes when standard output is connected to a terminal
|
||||
and OS is not WIN32), never. Only applies to the output of
|
||||
\fB\-getinfo\fR.
|
||||
.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\-help\fR
|
||||
.IP
|
||||
Print this help message and exit (also \fB\-h\fR or \-?)
|
||||
.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, testnet4:
|
||||
48332, signet: 38332, 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\-rpcwaittimeout=\fR<n>
|
||||
.IP
|
||||
Timeout in seconds to wait for the RPC server to start, or 0 for no
|
||||
timeout. (default: 0)
|
||||
.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. When combined with \fB\-stdinwalletpassphrase\fR,
|
||||
\fB\-stdinrpcpass\fR consumes the first line, and \fB\-stdinwalletpassphrase\fR
|
||||
consumes the second.
|
||||
.HP
|
||||
\fB\-stdinwalletpassphrase\fR
|
||||
.IP
|
||||
Read wallet passphrase from standard input as a single line. When
|
||||
combined with \fB\-stdin\fR, the first line from standard input is used
|
||||
for the wallet passphrase.
|
||||
.HP
|
||||
\fB\-version\fR
|
||||
.IP
|
||||
Print version and exit
|
||||
.PP
|
||||
Debugging/Testing options:
|
||||
.PP
|
||||
Chain selection options:
|
||||
.HP
|
||||
\fB\-chain=\fR<chain>
|
||||
.IP
|
||||
Use the chain <chain> (default: main). Allowed values: main, test,
|
||||
testnet4, signet, regtest
|
||||
.HP
|
||||
\fB\-signet\fR
|
||||
.IP
|
||||
Use the signet chain. Equivalent to \fB\-chain\fR=\fI\,signet\/\fR. Note that the network
|
||||
is defined by the \fB\-signetchallenge\fR parameter
|
||||
.HP
|
||||
\fB\-signetchallenge\fR
|
||||
.IP
|
||||
Blocks must satisfy the given script to be considered valid (only for
|
||||
signet networks; defaults to the global default signet test
|
||||
network challenge)
|
||||
.HP
|
||||
\fB\-signetseednode\fR
|
||||
.IP
|
||||
Specify a seed node for the signet network, in the hostname[:port]
|
||||
format, e.g. sig.net:1234 (may be used multiple times to specify
|
||||
multiple seed nodes; defaults to the global default signet test
|
||||
network seed node(s))
|
||||
.HP
|
||||
\fB\-testnet\fR
|
||||
.IP
|
||||
Use the testnet3 chain. Equivalent to \fB\-chain\fR=\fI\,test\/\fR. Support for testnet3
|
||||
is deprecated and will be removed in an upcoming release.
|
||||
Consider moving to testnet4 now by using \fB\-testnet4\fR.
|
||||
.HP
|
||||
\fB\-testnet4\fR
|
||||
.IP
|
||||
Use the testnet4 chain. Equivalent to \fB\-chain\fR=\fI\,testnet4\/\fR.
|
||||
.PP
|
||||
CLI Commands:
|
||||
.HP
|
||||
\fB\-addrinfo\fR
|
||||
.IP
|
||||
Get the number of addresses known to the node, per network and total,
|
||||
after filtering for quality and recency. The total number of
|
||||
addresses known to the node may be higher.
|
||||
.HP
|
||||
\fB\-generate\fR
|
||||
.IP
|
||||
Generate blocks, equivalent to RPC getnewaddress followed by RPC
|
||||
generatetoaddress. Optional positional integer arguments are
|
||||
number of blocks to generate (default: 1) and maximum iterations
|
||||
to try (default: 1000000), equivalent to RPC generatetoaddress
|
||||
nblocks and maxtries arguments. Example: bitcoin\-cli \fB\-generate\fR 4
|
||||
1000
|
||||
.HP
|
||||
\fB\-getinfo\fR
|
||||
.IP
|
||||
Get general information from the remote server. Note that unlike
|
||||
server\-side RPC calls, the output of \fB\-getinfo\fR is the result of
|
||||
multiple non\-atomic requests. Some entries in the output may
|
||||
represent results from different states (e.g. wallet balance may
|
||||
be as of a different block from the chain state reported)
|
||||
.HP
|
||||
\fB\-netinfo\fR
|
||||
.IP
|
||||
Get network peer connection information from the remote server. An
|
||||
optional argument from 0 to 4 can be passed for different peers
|
||||
listings (default: 0). If a non\-zero value is passed, an
|
||||
additional "outonly" (or "o") argument can be passed to see
|
||||
outbound peers only. Pass "help" (or "h") for detailed help
|
||||
documentation.
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2009-2025 The Bitcoin Core developers
|
||||
|
||||
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>
|
||||
.SH "SEE ALSO"
|
||||
bitcoind(1), bitcoin-cli(1), bitcoin-tx(1), bitcoin-wallet(1), bitcoin-util(1), bitcoin-qt(1)
|
||||
852
doc/man/bitcoin-qt.1
Normal file
852
doc/man/bitcoin-qt.1
Normal file
|
|
@ -0,0 +1,852 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH BITCOIN-QT "1" "September 2025" "bitcoin-qt v29.2.0rc1" "User Commands"
|
||||
.SH NAME
|
||||
bitcoin-qt \- manual page for bitcoin-qt v29.2.0rc1
|
||||
.SH SYNOPSIS
|
||||
.B bitcoin-qt
|
||||
[\fI\,options\/\fR] [\fI\,URI\/\fR]
|
||||
.SH DESCRIPTION
|
||||
Bitcoin Core version v29.2.0rc1
|
||||
.PP
|
||||
The bitcoin\-qt application provides a graphical interface for interacting with Bitcoin Core.
|
||||
.PP
|
||||
It combines the core functionalities of bitcoind with a user\-friendly interface for wallet management, transaction history, and network statistics.
|
||||
.PP
|
||||
It is suitable for users who prefer a graphical over a command\-line interface.
|
||||
.PP
|
||||
You can optionally specify a payment [URI], in e.g. the BIP21 URI format.
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\fB\-alertnotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command when an alert is raised (%s in cmd is replaced by
|
||||
message)
|
||||
.HP
|
||||
\fB\-allowignoredconf\fR
|
||||
.IP
|
||||
For backwards compatibility, treat an unused bitcoin.conf file in the
|
||||
datadir as a warning, not an error.
|
||||
.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:
|
||||
00000000000000000001b658dd1120e82e66d2790811f89ede9742ada3ed6d77,
|
||||
testnet3:
|
||||
00000000000003fc7967410ba2d0a8a8d50daedc318d43e8baf1a9782c236a57,
|
||||
testnet4:
|
||||
0000000000003ed4f08dbdf6f7d6b271a6bcffce25675cb40aa9fa43179a89f3,
|
||||
signet:
|
||||
000000895a110f46e59eb82bbc5bfb67fa314656009c295509c21b4999f5180a)
|
||||
.HP
|
||||
\fB\-blockfilterindex=\fR<type>
|
||||
.IP
|
||||
Maintain an index of compact filters by block (default: 0, values:
|
||||
basic). If <type> is not supplied or if <type> = 1, indexes for
|
||||
all known types are enabled.
|
||||
.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 directory to hold blocks subdirectory for *.dat files (default:
|
||||
<datadir>)
|
||||
.HP
|
||||
\fB\-blocksonly\fR
|
||||
.IP
|
||||
Whether to reject transactions from network peers. Disables automatic
|
||||
broadcast and rebroadcast of transactions, unless the source peer
|
||||
has the 'forcerelay' permission. RPC transactions are not
|
||||
affected. (default: 0)
|
||||
.HP
|
||||
\fB\-blocksxor\fR
|
||||
.IP
|
||||
Whether an XOR\-key applies to blocksdir *.dat files. The created XOR\-key
|
||||
will be zeros for an existing blocksdir or when `\-blocksxor=0` is
|
||||
set, and random for a freshly initialized blocksdir. (default: 1)
|
||||
.HP
|
||||
\fB\-coinstatsindex\fR
|
||||
.IP
|
||||
Maintain coinstats index used by the gettxoutsetinfo RPC (default: 0)
|
||||
.HP
|
||||
\fB\-conf=\fR<file>
|
||||
.IP
|
||||
Specify path to read\-only configuration file. Relative paths will be
|
||||
prefixed by datadir location (only useable from command line, not
|
||||
configuration file) (default: bitcoin.conf)
|
||||
.HP
|
||||
\fB\-daemon\fR
|
||||
.IP
|
||||
Run in the background as a daemon and accept commands (default: 0)
|
||||
.HP
|
||||
\fB\-daemonwait\fR
|
||||
.IP
|
||||
Wait for initialization to be finished before exiting. This implies
|
||||
\fB\-daemon\fR (default: 0)
|
||||
.HP
|
||||
\fB\-datadir=\fR<dir>
|
||||
.IP
|
||||
Specify data directory
|
||||
.HP
|
||||
\fB\-dbcache=\fR<n>
|
||||
.IP
|
||||
Maximum database cache size <n> MiB (minimum 4, default: 450). Make sure
|
||||
you have enough RAM. In addition, unused memory allocated to the
|
||||
mempool is shared with this cache (see \fB\-maxmempool\fR).
|
||||
.HP
|
||||
\fB\-debuglogfile=\fR<file>
|
||||
.IP
|
||||
Specify location of debug log file (default: debug.log). Relative paths
|
||||
will be prefixed by a net\-specific datadir location. Pass
|
||||
\fB\-nodebuglogfile\fR to disable writing the log to a file.
|
||||
.HP
|
||||
\fB\-help\fR
|
||||
.IP
|
||||
Print this help message and exit (also \fB\-h\fR or \-?)
|
||||
.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 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 (0 = auto, up to 15, <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\-persistmempoolv1\fR
|
||||
.IP
|
||||
Whether a mempool.dat file created by \fB\-persistmempool\fR or the savemempool
|
||||
RPC will be written in the legacy format (version 1) or the
|
||||
current format (version 2). This temporary option will be removed
|
||||
in the future. (default: 0)
|
||||
.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. 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
|
||||
If enabled, wipe chain state and block index, and rebuild them from
|
||||
blk*.dat files on disk. Also wipe and rebuild other optional
|
||||
indexes that are active. If an assumeutxo snapshot was loaded,
|
||||
its chainstate will be wiped as well. The snapshot can then be
|
||||
reloaded via RPC.
|
||||
.HP
|
||||
\fB\-reindex\-chainstate\fR
|
||||
.IP
|
||||
If enabled, wipe chain state, and rebuild it from blk*.dat files on
|
||||
disk. If an assumeutxo snapshot was loaded, its chainstate will
|
||||
be wiped as well. The snapshot can then be reloaded via RPC.
|
||||
.HP
|
||||
\fB\-settings=\fR<file>
|
||||
.IP
|
||||
Specify path to dynamic settings data file. Can be disabled with
|
||||
\fB\-nosettings\fR. File is written at runtime and not meant to be
|
||||
edited by users (use bitcoin.conf instead for custom settings).
|
||||
Relative paths will be prefixed by datadir location. (default:
|
||||
settings.json)
|
||||
.HP
|
||||
\fB\-shutdownnotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command immediately before beginning shutdown. The need for
|
||||
shutdown may be urgent, so be careful not to delay it long (if
|
||||
the command doesn't require interaction with the server, consider
|
||||
having it fork into the background).
|
||||
.HP
|
||||
\fB\-startupnotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command on startup.
|
||||
.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 help for more info). This option can be specified
|
||||
multiple times to add multiple nodes; connections are limited to
|
||||
8 at a time and are counted separately from the \fB\-maxconnections\fR
|
||||
limit.
|
||||
.HP
|
||||
\fB\-asmap=\fR<file>
|
||||
.IP
|
||||
Specify asn mapping used for bucketing of the peers (default:
|
||||
ip_asn.map). Relative paths will be prefixed by the net\-specific
|
||||
datadir location.
|
||||
.HP
|
||||
\fB\-bantime=\fR<n>
|
||||
.IP
|
||||
Default duration (in seconds) of manually configured bans (default:
|
||||
86400)
|
||||
.HP
|
||||
\fB\-bind=\fR<addr>[:<port>][=onion]
|
||||
.IP
|
||||
Bind to given address and always listen on it (default: 0.0.0.0). Use
|
||||
[host]:port notation for IPv6. Append =onion to tag any incoming
|
||||
connections to that address and port as incoming Tor connections
|
||||
(default: 127.0.0.1:8334=onion, testnet3: 127.0.0.1:18334=onion,
|
||||
testnet4: 127.0.0.1:48334=onion, signet: 127.0.0.1:38334=onion,
|
||||
regtest: 127.0.0.1:18445=onion)
|
||||
.HP
|
||||
\fB\-cjdnsreachable\fR
|
||||
.IP
|
||||
If set, then this host is configured for CJDNS (connecting to fc00::/8
|
||||
addresses would lead us to the CJDNS network, see doc/cjdns.md)
|
||||
(default: 0)
|
||||
.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 or \fB\-maxconnections\fR=\fI\,0\/\fR)
|
||||
.HP
|
||||
\fB\-externalip=\fR<ip>
|
||||
.IP
|
||||
Specify your own public address
|
||||
.HP
|
||||
\fB\-fixedseeds\fR
|
||||
.IP
|
||||
Allow fixed seeds if DNS seeds don't provide peers (default: 1)
|
||||
.HP
|
||||
\fB\-forcednsseed\fR
|
||||
.IP
|
||||
Always query for peer addresses via DNS lookup (default: 0)
|
||||
.HP
|
||||
\fB\-i2pacceptincoming\fR
|
||||
.IP
|
||||
Whether to accept inbound I2P connections (default: 1). Ignored if
|
||||
\fB\-i2psam\fR is not set. Listening for inbound I2P connections is done
|
||||
through the SAM proxy, not by binding to a local address and
|
||||
port.
|
||||
.HP
|
||||
\fB\-i2psam=\fR<ip:port>
|
||||
.IP
|
||||
I2P SAM proxy to reach I2P peers and accept I2P connections (default:
|
||||
none)
|
||||
.HP
|
||||
\fB\-listen\fR
|
||||
.IP
|
||||
Accept connections from outside (default: 1 if no \fB\-proxy\fR, \fB\-connect\fR or
|
||||
\fB\-maxconnections\fR=\fI\,0\/\fR)
|
||||
.HP
|
||||
\fB\-listenonion\fR
|
||||
.IP
|
||||
Automatically create Tor onion service (default: 1)
|
||||
.HP
|
||||
\fB\-maxconnections=\fR<n>
|
||||
.IP
|
||||
Maintain at most <n> automatic connections to peers (default: 125). This
|
||||
limit does not apply to connections manually added via \fB\-addnode\fR
|
||||
or the addnode RPC, which have a separate limit of 8.
|
||||
.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 memory usage for the send buffer, <n>*1000 bytes
|
||||
(default: 1000)
|
||||
.HP
|
||||
\fB\-maxuploadtarget=\fR<n>
|
||||
.IP
|
||||
Tries to keep outbound traffic under the given target per 24h. Limit
|
||||
does not apply to peers with 'download' permission or blocks
|
||||
created within past week. 0 = no limit (default: 0M). Optional
|
||||
suffix units [k|K|m|M|g|G|t|T] (default: M). Lowercase is 1000
|
||||
base while uppercase is 1024 base
|
||||
.HP
|
||||
\fB\-natpmp\fR
|
||||
.IP
|
||||
Use PCP or NAT\-PMP to map the listening port (default: 0)
|
||||
.HP
|
||||
\fB\-networkactive\fR
|
||||
.IP
|
||||
Enable all P2P network activity (default: 1). Can be changed by the
|
||||
setnetworkactive RPC command
|
||||
.HP
|
||||
\fB\-onion=\fR<ip:port|path>
|
||||
.IP
|
||||
Use separate SOCKS5 proxy to reach peers via Tor onion services, set
|
||||
\fB\-noonion\fR to disable (default: \fB\-proxy\fR). May be a local file path
|
||||
prefixed with 'unix:'.
|
||||
.HP
|
||||
\fB\-onlynet=\fR<net>
|
||||
.IP
|
||||
Make automatic outbound connections only to network <net> (ipv4, ipv6,
|
||||
onion, i2p, cjdns). Inbound and manual connections are not
|
||||
affected by this option. It can be specified multiple times to
|
||||
allow multiple networks.
|
||||
.HP
|
||||
\fB\-peerblockfilters\fR
|
||||
.IP
|
||||
Serve compact block filters to peers per BIP 157 (default: 0)
|
||||
.HP
|
||||
\fB\-peerbloomfilters\fR
|
||||
.IP
|
||||
Support filtering of blocks and transaction with bloom filters (default:
|
||||
0)
|
||||
.HP
|
||||
\fB\-port=\fR<port>
|
||||
.IP
|
||||
Listen for connections on <port> (default: 8333, testnet3: 18333,
|
||||
testnet4: 48333, signet: 38333, regtest: 18444). Not relevant for
|
||||
I2P (see doc/i2p.md). If set to a value x, the default onion
|
||||
listening port will be set to x+1.
|
||||
.HP
|
||||
\fB\-proxy=\fR<ip:port|path>
|
||||
.IP
|
||||
Connect through SOCKS5 proxy, set \fB\-noproxy\fR to disable (default:
|
||||
disabled). May be a local file path prefixed with 'unix:' if the
|
||||
proxy supports it.
|
||||
.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. During startup, seednodes will be tried before dnsseeds.
|
||||
.HP
|
||||
\fB\-timeout=\fR<n>
|
||||
.IP
|
||||
Specify socket connection timeout in milliseconds. If an initial attempt
|
||||
to connect is unsuccessful after this amount of time, drop it
|
||||
(minimum: 1, default: 5000)
|
||||
.HP
|
||||
\fB\-torcontrol=\fR<ip>:<port>
|
||||
.IP
|
||||
Tor control host and port to use if onion listening enabled (default:
|
||||
127.0.0.1:9051). If no port is specified, the default port of
|
||||
9051 will be used.
|
||||
.HP
|
||||
\fB\-torpassword=\fR<pass>
|
||||
.IP
|
||||
Tor control port password (default: empty)
|
||||
.HP
|
||||
\fB\-v2transport\fR
|
||||
.IP
|
||||
Support v2 transport (default: 1)
|
||||
.HP
|
||||
\fB\-whitebind=\fR<[permissions@]addr>
|
||||
.IP
|
||||
Bind to the given address and add permission flags to the peers
|
||||
connecting to it. Use [host]:port notation for IPv6. Allowed
|
||||
permissions: bloomfilter (allow requesting BIP37 filtered blocks
|
||||
and transactions), noban (do not ban for misbehavior; implies
|
||||
download), forcerelay (relay transactions that are already in the
|
||||
mempool; implies relay), relay (relay even in \fB\-blocksonly\fR mode,
|
||||
and unlimited transaction announcements), mempool (allow
|
||||
requesting BIP35 mempool contents), download (allow getheaders
|
||||
during IBD, no disconnect after maxuploadtarget limit), addr
|
||||
(responses to GETADDR avoid hitting the cache and contain random
|
||||
records with the most up\-to\-date info). Specify multiple
|
||||
permissions separated by commas (default:
|
||||
download,noban,mempool,relay). Can be specified multiple times.
|
||||
.HP
|
||||
\fB\-whitelist=\fR<[permissions@]IP address or network>
|
||||
.IP
|
||||
Add permission flags to the peers using the given IP address (e.g.
|
||||
1.2.3.4) or CIDR\-notated network (e.g. 1.2.3.0/24). Uses the same
|
||||
permissions as \fB\-whitebind\fR. Additional flags "in" and "out"
|
||||
control whether permissions apply to incoming connections and/or
|
||||
manual (default: incoming only). Can be specified multiple times.
|
||||
.PP
|
||||
Wallet options:
|
||||
.HP
|
||||
\fB\-addresstype\fR
|
||||
.IP
|
||||
What type of addresses to use ("legacy", "p2sh\-segwit", "bech32", or
|
||||
"bech32m", default: "bech32")
|
||||
.HP
|
||||
\fB\-avoidpartialspends\fR
|
||||
.IP
|
||||
Group outputs by address, selecting many (possibly all) or none, instead
|
||||
of selecting on a per\-output basis. Privacy is improved as
|
||||
addresses are mostly swept with fewer transactions and outputs
|
||||
are aggregated in clean change addresses. It may result in higher
|
||||
fees due to less optimal coin selection caused by this added
|
||||
limitation and possibly a larger\-than\-necessary number of inputs
|
||||
being used. Always enabled for wallets with "avoid_reuse"
|
||||
enabled, otherwise default: 0.
|
||||
.HP
|
||||
\fB\-changetype\fR
|
||||
.IP
|
||||
What type of change to use ("legacy", "p2sh\-segwit", "bech32", or
|
||||
"bech32m"). Default is "legacy" when \fB\-addresstype\fR=\fI\,legacy\/\fR, else it
|
||||
is an implementation detail.
|
||||
.HP
|
||||
\fB\-consolidatefeerate=\fR<amt>
|
||||
.IP
|
||||
The maximum feerate (in BTC/kvB) at which transaction building may use
|
||||
more inputs than strictly necessary so that the wallet's UTXO
|
||||
pool can be reduced (default: 0.0001).
|
||||
.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/kvB) 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/kvB) that will be used when fee estimation has
|
||||
insufficient data. 0 to entirely disable the fallbackfee feature.
|
||||
(default: 0.00)
|
||||
.HP
|
||||
\fB\-keypool=\fR<n>
|
||||
.IP
|
||||
Set key pool size to <n> (default: 1000). Warning: Smaller sizes may
|
||||
increase the risk of losing funds when restoring from an old
|
||||
backup, if none of the addresses in the original keypool have
|
||||
been used.
|
||||
.HP
|
||||
\fB\-maxapsfee=\fR<n>
|
||||
.IP
|
||||
Spend up to this amount in additional (absolute) fees (in BTC) if it
|
||||
allows the use of partial spend avoidance (default: 0.00)
|
||||
.HP
|
||||
\fB\-mintxfee=\fR<amt>
|
||||
.IP
|
||||
Fee rates (in BTC/kvB) smaller than this are considered zero fee for
|
||||
transaction creation (default: 0.00001)
|
||||
.HP
|
||||
\fB\-paytxfee=\fR<amt>
|
||||
.IP
|
||||
Fee rate (in BTC/kvB) to add to transactions you send (default: 0.00)
|
||||
.HP
|
||||
\fB\-signer=\fR<cmd>
|
||||
.IP
|
||||
External signing tool, see doc/external\-signer.md
|
||||
.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\-wallet=\fR<path>
|
||||
.IP
|
||||
Specify wallet path to load at startup. Can be used multiple times to
|
||||
load multiple wallets. Path is to a directory containing wallet
|
||||
data and log files. If the path is not absolute, it is
|
||||
interpreted relative to <walletdir>. This only loads existing
|
||||
wallets and does not create new ones. For backwards compatibility
|
||||
this also accepts names of existing top\-level 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, %w is replaced by wallet name, %b is replaced by the
|
||||
hash of the block including the transaction (set to 'unconfirmed'
|
||||
if the transaction is not included) and %h is replaced by the
|
||||
block height (\fB\-1\fR if not included). %w is not currently
|
||||
implemented on windows. On systems where %w is supported, it
|
||||
should NOT be quoted because this would break shell escaping used
|
||||
to invoke the command.
|
||||
.HP
|
||||
\fB\-walletrbf\fR
|
||||
.IP
|
||||
Send transactions with full\-RBF opt\-in enabled (RPC only, default: 1)
|
||||
.PP
|
||||
ZeroMQ notification options:
|
||||
.HP
|
||||
\fB\-zmqpubhashblock=\fR<address>
|
||||
.IP
|
||||
Enable publish hash block in <address>
|
||||
.HP
|
||||
\fB\-zmqpubhashblockhwm=\fR<n>
|
||||
.IP
|
||||
Set publish hash block outbound message high water mark (default: 1000)
|
||||
.HP
|
||||
\fB\-zmqpubhashtx=\fR<address>
|
||||
.IP
|
||||
Enable publish hash transaction in <address>
|
||||
.HP
|
||||
\fB\-zmqpubhashtxhwm=\fR<n>
|
||||
.IP
|
||||
Set publish hash transaction outbound message high water mark (default:
|
||||
1000)
|
||||
.HP
|
||||
\fB\-zmqpubrawblock=\fR<address>
|
||||
.IP
|
||||
Enable publish raw block in <address>
|
||||
.HP
|
||||
\fB\-zmqpubrawblockhwm=\fR<n>
|
||||
.IP
|
||||
Set publish raw block outbound message high water mark (default: 1000)
|
||||
.HP
|
||||
\fB\-zmqpubrawtx=\fR<address>
|
||||
.IP
|
||||
Enable publish raw transaction in <address>
|
||||
.HP
|
||||
\fB\-zmqpubrawtxhwm=\fR<n>
|
||||
.IP
|
||||
Set publish raw transaction outbound message high water mark (default:
|
||||
1000)
|
||||
.HP
|
||||
\fB\-zmqpubsequence=\fR<address>
|
||||
.IP
|
||||
Enable publish hash block and tx sequence in <address>
|
||||
.HP
|
||||
\fB\-zmqpubsequencehwm=\fR<n>
|
||||
.IP
|
||||
Set publish hash sequence message high water mark (default: 1000)
|
||||
.PP
|
||||
Debugging/Testing options:
|
||||
.HP
|
||||
\fB\-debug=\fR<category>
|
||||
.IP
|
||||
Output debug and trace logging (default: \fB\-nodebug\fR, supplying <category>
|
||||
is optional). If <category> is not supplied or if <category> is 1
|
||||
or "all", output all debug logging. If <category> is 0 or "none",
|
||||
any other categories are ignored. Other valid values for
|
||||
<category> are: addrman, bench, blockstorage, cmpctblock, coindb,
|
||||
estimatefee, http, i2p, ipc, leveldb, libevent, mempool,
|
||||
mempoolrej, net, proxy, prune, qt, rand, reindex, rpc, scan,
|
||||
selectcoins, tor, txpackages, txreconciliation, validation,
|
||||
walletdb, zmq. This option can be specified multiple times to
|
||||
output multiple categories.
|
||||
.HP
|
||||
\fB\-debugexclude=\fR<category>
|
||||
.IP
|
||||
Exclude debug and trace logging for a category. Can be used in
|
||||
conjunction with \fB\-debug\fR=\fI\,1\/\fR to output debug and trace logging for
|
||||
all categories except the specified category. This option can be
|
||||
specified multiple times to exclude multiple categories. This
|
||||
takes priority over "\-debug"
|
||||
.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\-loglevelalways\fR
|
||||
.IP
|
||||
Always prepend a category and level (default: 0)
|
||||
.HP
|
||||
\fB\-logsourcelocations\fR
|
||||
.IP
|
||||
Prepend debug output with name of the originating source location
|
||||
(source file, line number and function name) (default: 0)
|
||||
.HP
|
||||
\fB\-logthreadnames\fR
|
||||
.IP
|
||||
Prepend debug output with name of the originating thread (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;
|
||||
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\-chain=\fR<chain>
|
||||
.IP
|
||||
Use the chain <chain> (default: main). Allowed values: main, test,
|
||||
testnet4, signet, regtest
|
||||
.HP
|
||||
\fB\-signet\fR
|
||||
.IP
|
||||
Use the signet chain. Equivalent to \fB\-chain\fR=\fI\,signet\/\fR. Note that the network
|
||||
is defined by the \fB\-signetchallenge\fR parameter
|
||||
.HP
|
||||
\fB\-signetchallenge\fR
|
||||
.IP
|
||||
Blocks must satisfy the given script to be considered valid (only for
|
||||
signet networks; defaults to the global default signet test
|
||||
network challenge)
|
||||
.HP
|
||||
\fB\-signetseednode\fR
|
||||
.IP
|
||||
Specify a seed node for the signet network, in the hostname[:port]
|
||||
format, e.g. sig.net:1234 (may be used multiple times to specify
|
||||
multiple seed nodes; defaults to the global default signet test
|
||||
network seed node(s))
|
||||
.HP
|
||||
\fB\-testnet\fR
|
||||
.IP
|
||||
Use the testnet3 chain. Equivalent to \fB\-chain\fR=\fI\,test\/\fR. Support for testnet3
|
||||
is deprecated and will be removed in an upcoming release.
|
||||
Consider moving to testnet4 now by using \fB\-testnet4\fR.
|
||||
.HP
|
||||
\fB\-testnet4\fR
|
||||
.IP
|
||||
Use the testnet4 chain. Equivalent to \fB\-chain\fR=\fI\,testnet4\/\fR.
|
||||
.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
|
||||
Relay and mine transactions whose data\-carrying raw scriptPubKey is of
|
||||
this size or less (default: 83)
|
||||
.HP
|
||||
\fB\-minrelaytxfee=\fR<amt>
|
||||
.IP
|
||||
Fees (in BTC/kvB) smaller than this are considered zero fee for
|
||||
relaying, mining and transaction creation (default: 0.000001)
|
||||
.HP
|
||||
\fB\-permitbaremultisig\fR
|
||||
.IP
|
||||
Relay transactions creating non\-P2SH multisig outputs (default: 1)
|
||||
.HP
|
||||
\fB\-whitelistforcerelay\fR
|
||||
.IP
|
||||
Add 'forcerelay' permission to whitelisted peers with default
|
||||
permissions. This will relay transactions even if the
|
||||
transactions were already in the mempool. (default: 0)
|
||||
.HP
|
||||
\fB\-whitelistrelay\fR
|
||||
.IP
|
||||
Add 'relay' permission to whitelisted peers with default permissions.
|
||||
This will accept relayed transactions even when not relaying
|
||||
transactions (default: 1)
|
||||
.PP
|
||||
Block creation options:
|
||||
.HP
|
||||
\fB\-blockmaxweight=\fR<n>
|
||||
.IP
|
||||
Set maximum BIP141 block weight (default: 4000000)
|
||||
.HP
|
||||
\fB\-blockmintxfee=\fR<amt>
|
||||
.IP
|
||||
Set lowest fee rate (in BTC/kvB) for transactions to be included in
|
||||
block creation. (default: 0.00000001)
|
||||
.HP
|
||||
\fB\-blockreservedweight=\fR<n>
|
||||
.IP
|
||||
Reserve space for the fixed\-size block header plus the largest coinbase
|
||||
transaction the mining software may add to the block. (default:
|
||||
8000).
|
||||
.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 values 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), a network/CIDR (e.g. 1.2.3.4/24), all
|
||||
ipv4 (0.0.0.0/0), or all ipv6 (::/0). 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\-rpccookieperms=\fR<readable\-by>
|
||||
.IP
|
||||
Set permissions on the RPC auth cookie file so that it is readable by
|
||||
[owner|group|all] (default: owner [via umask 0077])
|
||||
.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, testnet3:
|
||||
18332, testnet4: 48332, signet: 38332, regtest: 18443)
|
||||
.HP
|
||||
\fB\-rpcthreads=\fR<n>
|
||||
.IP
|
||||
Set the number of threads to service RPC calls (default: 16)
|
||||
.HP
|
||||
\fB\-rpcuser=\fR<user>
|
||||
.IP
|
||||
Username for JSON\-RPC connections
|
||||
.HP
|
||||
\fB\-rpcwhitelist=\fR<whitelist>
|
||||
.IP
|
||||
Set a whitelist to filter incoming RPC calls for a specific user. The
|
||||
field <whitelist> comes in the format: <USERNAME>:<rpc 1>,<rpc
|
||||
2>,...,<rpc n>. If multiple whitelists are set for a given user,
|
||||
they are set\-intersected. See \fB\-rpcwhitelistdefault\fR documentation
|
||||
for information on default whitelist behavior.
|
||||
.HP
|
||||
\fB\-rpcwhitelistdefault\fR
|
||||
.IP
|
||||
Sets default behavior for rpc whitelisting. Unless rpcwhitelistdefault
|
||||
is set to 0, if any \fB\-rpcwhitelist\fR is set, the rpc server acts as
|
||||
if all rpc users are subject to empty\-unless\-otherwise\-specified
|
||||
whitelists. If rpcwhitelistdefault is set to 1 and no
|
||||
\fB\-rpcwhitelist\fR is set, rpc server acts as if all rpc users are
|
||||
subject to empty whitelists.
|
||||
.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\-splash\fR
|
||||
.IP
|
||||
Show splash screen on startup (default: 1)
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2009-2025 The Bitcoin Core developers
|
||||
|
||||
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>
|
||||
.SH "SEE ALSO"
|
||||
bitcoind(1), bitcoin-cli(1), bitcoin-tx(1), bitcoin-wallet(1), bitcoin-util(1), bitcoin-qt(1)
|
||||
159
doc/man/bitcoin-tx.1
Normal file
159
doc/man/bitcoin-tx.1
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH BITCOIN-TX "1" "September 2025" "bitcoin-tx v29.2.0rc1" "User Commands"
|
||||
.SH NAME
|
||||
bitcoin-tx \- manual page for bitcoin-tx v29.2.0rc1
|
||||
.SH SYNOPSIS
|
||||
.B bitcoin-tx
|
||||
[\fI\,options\/\fR] \fI\,<hex-tx> \/\fR[\fI\,commands\/\fR]
|
||||
.br
|
||||
.B bitcoin-tx
|
||||
[\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR]
|
||||
.SH DESCRIPTION
|
||||
Bitcoin Core bitcoin\-tx utility version v29.2.0rc1
|
||||
.PP
|
||||
The bitcoin\-tx tool is used for creating and modifying bitcoin transactions.
|
||||
.PP
|
||||
bitcoin\-tx can be used with "<hex\-tx> [commands]" to update a hex\-encoded bitcoin transaction, or with "\-create [commands]" to create a hex\-encoded bitcoin transaction.
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\fB\-create\fR
|
||||
.IP
|
||||
Create new, empty TX.
|
||||
.HP
|
||||
\fB\-help\fR
|
||||
.IP
|
||||
Print this help message and exit (also \fB\-h\fR or \-?)
|
||||
.HP
|
||||
\fB\-json\fR
|
||||
.IP
|
||||
Select JSON output
|
||||
.HP
|
||||
\fB\-txid\fR
|
||||
.IP
|
||||
Output only the hex\-encoded transaction id of the resultant transaction.
|
||||
.HP
|
||||
\fB\-version\fR
|
||||
.IP
|
||||
Print version and exit
|
||||
.PP
|
||||
Debugging/Testing options:
|
||||
.PP
|
||||
Chain selection options:
|
||||
.HP
|
||||
\fB\-chain=\fR<chain>
|
||||
.IP
|
||||
Use the chain <chain> (default: main). Allowed values: main, test,
|
||||
testnet4, signet, regtest
|
||||
.HP
|
||||
\fB\-signet\fR
|
||||
.IP
|
||||
Use the signet chain. Equivalent to \fB\-chain\fR=\fI\,signet\/\fR. Note that the network
|
||||
is defined by the \fB\-signetchallenge\fR parameter
|
||||
.HP
|
||||
\fB\-signetchallenge\fR
|
||||
.IP
|
||||
Blocks must satisfy the given script to be considered valid (only for
|
||||
signet networks; defaults to the global default signet test
|
||||
network challenge)
|
||||
.HP
|
||||
\fB\-signetseednode\fR
|
||||
.IP
|
||||
Specify a seed node for the signet network, in the hostname[:port]
|
||||
format, e.g. sig.net:1234 (may be used multiple times to specify
|
||||
multiple seed nodes; defaults to the global default signet test
|
||||
network seed node(s))
|
||||
.HP
|
||||
\fB\-testnet\fR
|
||||
.IP
|
||||
Use the testnet3 chain. Equivalent to \fB\-chain\fR=\fI\,test\/\fR. Support for testnet3
|
||||
is deprecated and will be removed in an upcoming release.
|
||||
Consider moving to testnet4 now by using \fB\-testnet4\fR.
|
||||
.HP
|
||||
\fB\-testnet4\fR
|
||||
.IP
|
||||
Use the testnet4 chain. Equivalent to \fB\-chain\fR=\fI\,testnet4\/\fR.
|
||||
.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
|
||||
Sets Replace\-By\-Fee (RBF) opt\-in sequence number for input N. If N is
|
||||
not provided, the command attempts to opt\-in all available inputs
|
||||
for RBF. If the transaction has no inputs, this option is
|
||||
ignored.
|
||||
.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-2025 The Bitcoin Core developers
|
||||
|
||||
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>
|
||||
.SH "SEE ALSO"
|
||||
bitcoind(1), bitcoin-cli(1), bitcoin-tx(1), bitcoin-wallet(1), bitcoin-util(1), bitcoin-qt(1)
|
||||
78
doc/man/bitcoin-util.1
Normal file
78
doc/man/bitcoin-util.1
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH BITCOIN-UTIL "1" "September 2025" "bitcoin-util v29.2.0rc1" "User Commands"
|
||||
.SH NAME
|
||||
bitcoin-util \- manual page for bitcoin-util v29.2.0rc1
|
||||
.SH SYNOPSIS
|
||||
.B bitcoin-util
|
||||
[\fI\,options\/\fR] [\fI\,command\/\fR]
|
||||
.br
|
||||
.B bitcoin-util
|
||||
[\fI\,options\/\fR] \fI\,grind <hex-block-header>\/\fR
|
||||
.SH DESCRIPTION
|
||||
Bitcoin Core bitcoin\-util utility version v29.2.0rc1
|
||||
.PP
|
||||
The bitcoin\-util tool provides bitcoin related functionality that does not rely on the ability to access a running node. Available [commands] are listed below.
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\fB\-help\fR
|
||||
.IP
|
||||
Print this help message and exit (also \fB\-h\fR or \-?)
|
||||
.HP
|
||||
\fB\-version\fR
|
||||
.IP
|
||||
Print version and exit
|
||||
.PP
|
||||
Debugging/Testing options:
|
||||
.PP
|
||||
Chain selection options:
|
||||
.HP
|
||||
\fB\-chain=\fR<chain>
|
||||
.IP
|
||||
Use the chain <chain> (default: main). Allowed values: main, test,
|
||||
testnet4, signet, regtest
|
||||
.HP
|
||||
\fB\-signet\fR
|
||||
.IP
|
||||
Use the signet chain. Equivalent to \fB\-chain\fR=\fI\,signet\/\fR. Note that the network
|
||||
is defined by the \fB\-signetchallenge\fR parameter
|
||||
.HP
|
||||
\fB\-signetchallenge\fR
|
||||
.IP
|
||||
Blocks must satisfy the given script to be considered valid (only for
|
||||
signet networks; defaults to the global default signet test
|
||||
network challenge)
|
||||
.HP
|
||||
\fB\-signetseednode\fR
|
||||
.IP
|
||||
Specify a seed node for the signet network, in the hostname[:port]
|
||||
format, e.g. sig.net:1234 (may be used multiple times to specify
|
||||
multiple seed nodes; defaults to the global default signet test
|
||||
network seed node(s))
|
||||
.HP
|
||||
\fB\-testnet\fR
|
||||
.IP
|
||||
Use the testnet3 chain. Equivalent to \fB\-chain\fR=\fI\,test\/\fR. Support for testnet3
|
||||
is deprecated and will be removed in an upcoming release.
|
||||
Consider moving to testnet4 now by using \fB\-testnet4\fR.
|
||||
.HP
|
||||
\fB\-testnet4\fR
|
||||
.IP
|
||||
Use the testnet4 chain. Equivalent to \fB\-chain\fR=\fI\,testnet4\/\fR.
|
||||
.PP
|
||||
Commands:
|
||||
.IP
|
||||
grind
|
||||
.IP
|
||||
Perform proof of work on hex header string
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2009-2025 The Bitcoin Core developers
|
||||
|
||||
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>
|
||||
.SH "SEE ALSO"
|
||||
bitcoind(1), bitcoin-cli(1), bitcoin-tx(1), bitcoin-wallet(1), bitcoin-util(1), bitcoin-qt(1)
|
||||
136
doc/man/bitcoin-wallet.1
Normal file
136
doc/man/bitcoin-wallet.1
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH BITCOIN-WALLET "1" "September 2025" "bitcoin-wallet v29.2.0rc1" "User Commands"
|
||||
.SH NAME
|
||||
bitcoin-wallet \- manual page for bitcoin-wallet v29.2.0rc1
|
||||
.SH SYNOPSIS
|
||||
.B bitcoin-wallet
|
||||
[\fI\,options\/\fR] \fI\,<command>\/\fR
|
||||
.SH DESCRIPTION
|
||||
Bitcoin Core bitcoin\-wallet utility version v29.2.0rc1
|
||||
.PP
|
||||
bitcoin\-wallet is an offline tool for creating and interacting with Bitcoin Core wallet files.
|
||||
.PP
|
||||
By default bitcoin\-wallet will act on wallets in the default mainnet wallet directory in the datadir.
|
||||
.PP
|
||||
To change the target wallet, use the \fB\-datadir\fR, \fB\-wallet\fR and (test)chain selection arguments.
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\fB\-datadir=\fR<dir>
|
||||
.IP
|
||||
Specify data directory
|
||||
.HP
|
||||
\fB\-descriptors\fR
|
||||
.IP
|
||||
Create descriptors wallet. Only for 'create'
|
||||
.HP
|
||||
\fB\-dumpfile=\fR<file name>
|
||||
.IP
|
||||
When used with 'dump', writes out the records to this file. When used
|
||||
with 'createfromdump', loads the records into a new wallet.
|
||||
.HP
|
||||
\fB\-format=\fR<format>
|
||||
.IP
|
||||
The format of the wallet file to create. Either "bdb" or "sqlite". Only
|
||||
used with 'createfromdump'
|
||||
.HP
|
||||
\fB\-help\fR
|
||||
.IP
|
||||
Print this help message and exit (also \fB\-h\fR or \-?)
|
||||
.HP
|
||||
\fB\-legacy\fR
|
||||
.IP
|
||||
Create legacy wallet. Only for 'create'
|
||||
.HP
|
||||
\fB\-version\fR
|
||||
.IP
|
||||
Print version and exit
|
||||
.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).
|
||||
.HP
|
||||
\fB\-withinternalbdb\fR
|
||||
.IP
|
||||
Use the internal Berkeley DB parser when dumping a Berkeley DB wallet
|
||||
file (default: false)
|
||||
.PP
|
||||
Chain selection options:
|
||||
.HP
|
||||
\fB\-chain=\fR<chain>
|
||||
.IP
|
||||
Use the chain <chain> (default: main). Allowed values: main, test,
|
||||
testnet4, signet, regtest
|
||||
.HP
|
||||
\fB\-signet\fR
|
||||
.IP
|
||||
Use the signet chain. Equivalent to \fB\-chain\fR=\fI\,signet\/\fR. Note that the network
|
||||
is defined by the \fB\-signetchallenge\fR parameter
|
||||
.HP
|
||||
\fB\-signetchallenge\fR
|
||||
.IP
|
||||
Blocks must satisfy the given script to be considered valid (only for
|
||||
signet networks; defaults to the global default signet test
|
||||
network challenge)
|
||||
.HP
|
||||
\fB\-signetseednode\fR
|
||||
.IP
|
||||
Specify a seed node for the signet network, in the hostname[:port]
|
||||
format, e.g. sig.net:1234 (may be used multiple times to specify
|
||||
multiple seed nodes; defaults to the global default signet test
|
||||
network seed node(s))
|
||||
.HP
|
||||
\fB\-testnet\fR
|
||||
.IP
|
||||
Use the testnet3 chain. Equivalent to \fB\-chain\fR=\fI\,test\/\fR. Support for testnet3
|
||||
is deprecated and will be removed in an upcoming release.
|
||||
Consider moving to testnet4 now by using \fB\-testnet4\fR.
|
||||
.HP
|
||||
\fB\-testnet4\fR
|
||||
.IP
|
||||
Use the testnet4 chain. Equivalent to \fB\-chain\fR=\fI\,testnet4\/\fR.
|
||||
.PP
|
||||
Commands:
|
||||
.IP
|
||||
create
|
||||
.IP
|
||||
Create new wallet file
|
||||
.IP
|
||||
createfromdump
|
||||
.IP
|
||||
Create new wallet file from dumped records
|
||||
.IP
|
||||
dump
|
||||
.IP
|
||||
Print out all of the wallet key\-value records
|
||||
.IP
|
||||
info
|
||||
.IP
|
||||
Get wallet info
|
||||
.IP
|
||||
salvage
|
||||
.IP
|
||||
Attempt to recover private keys from a corrupt wallet. Warning:
|
||||
\&'salvage' is experimental.
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2009-2025 The Bitcoin Core developers
|
||||
|
||||
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>
|
||||
.SH "SEE ALSO"
|
||||
bitcoind(1), bitcoin-cli(1), bitcoin-tx(1), bitcoin-wallet(1), bitcoin-util(1), bitcoin-qt(1)
|
||||
830
doc/man/bitcoind.1
Normal file
830
doc/man/bitcoind.1
Normal file
|
|
@ -0,0 +1,830 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH BITCOIND "1" "September 2025" "bitcoind v29.2.0rc1" "User Commands"
|
||||
.SH NAME
|
||||
bitcoind \- manual page for bitcoind v29.2.0rc1
|
||||
.SH SYNOPSIS
|
||||
.B bitcoind
|
||||
[\fI\,options\/\fR]
|
||||
.SH DESCRIPTION
|
||||
Bitcoin Core daemon version v29.2.0rc1
|
||||
.PP
|
||||
The Bitcoin Core daemon (bitcoind) is a headless program that connects to the Bitcoin network to validate and relay transactions and blocks, as well as relaying addresses.
|
||||
.PP
|
||||
It provides the backbone of the Bitcoin network and its RPC, REST and ZMQ services can provide various transaction, block and address\-related services.
|
||||
.PP
|
||||
There is an optional wallet component which provides transaction services.
|
||||
.PP
|
||||
It can be used in a headless environment or as part of a server setup.
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\fB\-alertnotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command when an alert is raised (%s in cmd is replaced by
|
||||
message)
|
||||
.HP
|
||||
\fB\-allowignoredconf\fR
|
||||
.IP
|
||||
For backwards compatibility, treat an unused bitcoin.conf file in the
|
||||
datadir as a warning, not an error.
|
||||
.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:
|
||||
00000000000000000001b658dd1120e82e66d2790811f89ede9742ada3ed6d77,
|
||||
testnet3:
|
||||
00000000000003fc7967410ba2d0a8a8d50daedc318d43e8baf1a9782c236a57,
|
||||
testnet4:
|
||||
0000000000003ed4f08dbdf6f7d6b271a6bcffce25675cb40aa9fa43179a89f3,
|
||||
signet:
|
||||
000000895a110f46e59eb82bbc5bfb67fa314656009c295509c21b4999f5180a)
|
||||
.HP
|
||||
\fB\-blockfilterindex=\fR<type>
|
||||
.IP
|
||||
Maintain an index of compact filters by block (default: 0, values:
|
||||
basic). If <type> is not supplied or if <type> = 1, indexes for
|
||||
all known types are enabled.
|
||||
.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 directory to hold blocks subdirectory for *.dat files (default:
|
||||
<datadir>)
|
||||
.HP
|
||||
\fB\-blocksonly\fR
|
||||
.IP
|
||||
Whether to reject transactions from network peers. Disables automatic
|
||||
broadcast and rebroadcast of transactions, unless the source peer
|
||||
has the 'forcerelay' permission. RPC transactions are not
|
||||
affected. (default: 0)
|
||||
.HP
|
||||
\fB\-blocksxor\fR
|
||||
.IP
|
||||
Whether an XOR\-key applies to blocksdir *.dat files. The created XOR\-key
|
||||
will be zeros for an existing blocksdir or when `\-blocksxor=0` is
|
||||
set, and random for a freshly initialized blocksdir. (default: 1)
|
||||
.HP
|
||||
\fB\-coinstatsindex\fR
|
||||
.IP
|
||||
Maintain coinstats index used by the gettxoutsetinfo RPC (default: 0)
|
||||
.HP
|
||||
\fB\-conf=\fR<file>
|
||||
.IP
|
||||
Specify path to read\-only configuration file. Relative paths will be
|
||||
prefixed by datadir location (only useable from command line, not
|
||||
configuration file) (default: bitcoin.conf)
|
||||
.HP
|
||||
\fB\-daemon\fR
|
||||
.IP
|
||||
Run in the background as a daemon and accept commands (default: 0)
|
||||
.HP
|
||||
\fB\-daemonwait\fR
|
||||
.IP
|
||||
Wait for initialization to be finished before exiting. This implies
|
||||
\fB\-daemon\fR (default: 0)
|
||||
.HP
|
||||
\fB\-datadir=\fR<dir>
|
||||
.IP
|
||||
Specify data directory
|
||||
.HP
|
||||
\fB\-dbcache=\fR<n>
|
||||
.IP
|
||||
Maximum database cache size <n> MiB (minimum 4, default: 450). Make sure
|
||||
you have enough RAM. In addition, unused memory allocated to the
|
||||
mempool is shared with this cache (see \fB\-maxmempool\fR).
|
||||
.HP
|
||||
\fB\-debuglogfile=\fR<file>
|
||||
.IP
|
||||
Specify location of debug log file (default: debug.log). Relative paths
|
||||
will be prefixed by a net\-specific datadir location. Pass
|
||||
\fB\-nodebuglogfile\fR to disable writing the log to a file.
|
||||
.HP
|
||||
\fB\-help\fR
|
||||
.IP
|
||||
Print this help message and exit (also \fB\-h\fR or \-?)
|
||||
.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 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 (0 = auto, up to 15, <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\-persistmempoolv1\fR
|
||||
.IP
|
||||
Whether a mempool.dat file created by \fB\-persistmempool\fR or the savemempool
|
||||
RPC will be written in the legacy format (version 1) or the
|
||||
current format (version 2). This temporary option will be removed
|
||||
in the future. (default: 0)
|
||||
.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. 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
|
||||
If enabled, wipe chain state and block index, and rebuild them from
|
||||
blk*.dat files on disk. Also wipe and rebuild other optional
|
||||
indexes that are active. If an assumeutxo snapshot was loaded,
|
||||
its chainstate will be wiped as well. The snapshot can then be
|
||||
reloaded via RPC.
|
||||
.HP
|
||||
\fB\-reindex\-chainstate\fR
|
||||
.IP
|
||||
If enabled, wipe chain state, and rebuild it from blk*.dat files on
|
||||
disk. If an assumeutxo snapshot was loaded, its chainstate will
|
||||
be wiped as well. The snapshot can then be reloaded via RPC.
|
||||
.HP
|
||||
\fB\-settings=\fR<file>
|
||||
.IP
|
||||
Specify path to dynamic settings data file. Can be disabled with
|
||||
\fB\-nosettings\fR. File is written at runtime and not meant to be
|
||||
edited by users (use bitcoin.conf instead for custom settings).
|
||||
Relative paths will be prefixed by datadir location. (default:
|
||||
settings.json)
|
||||
.HP
|
||||
\fB\-shutdownnotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command immediately before beginning shutdown. The need for
|
||||
shutdown may be urgent, so be careful not to delay it long (if
|
||||
the command doesn't require interaction with the server, consider
|
||||
having it fork into the background).
|
||||
.HP
|
||||
\fB\-startupnotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command on startup.
|
||||
.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 help for more info). This option can be specified
|
||||
multiple times to add multiple nodes; connections are limited to
|
||||
8 at a time and are counted separately from the \fB\-maxconnections\fR
|
||||
limit.
|
||||
.HP
|
||||
\fB\-asmap=\fR<file>
|
||||
.IP
|
||||
Specify asn mapping used for bucketing of the peers (default:
|
||||
ip_asn.map). Relative paths will be prefixed by the net\-specific
|
||||
datadir location.
|
||||
.HP
|
||||
\fB\-bantime=\fR<n>
|
||||
.IP
|
||||
Default duration (in seconds) of manually configured bans (default:
|
||||
86400)
|
||||
.HP
|
||||
\fB\-bind=\fR<addr>[:<port>][=onion]
|
||||
.IP
|
||||
Bind to given address and always listen on it (default: 0.0.0.0). Use
|
||||
[host]:port notation for IPv6. Append =onion to tag any incoming
|
||||
connections to that address and port as incoming Tor connections
|
||||
(default: 127.0.0.1:8334=onion, testnet3: 127.0.0.1:18334=onion,
|
||||
testnet4: 127.0.0.1:48334=onion, signet: 127.0.0.1:38334=onion,
|
||||
regtest: 127.0.0.1:18445=onion)
|
||||
.HP
|
||||
\fB\-cjdnsreachable\fR
|
||||
.IP
|
||||
If set, then this host is configured for CJDNS (connecting to fc00::/8
|
||||
addresses would lead us to the CJDNS network, see doc/cjdns.md)
|
||||
(default: 0)
|
||||
.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 or \fB\-maxconnections\fR=\fI\,0\/\fR)
|
||||
.HP
|
||||
\fB\-externalip=\fR<ip>
|
||||
.IP
|
||||
Specify your own public address
|
||||
.HP
|
||||
\fB\-fixedseeds\fR
|
||||
.IP
|
||||
Allow fixed seeds if DNS seeds don't provide peers (default: 1)
|
||||
.HP
|
||||
\fB\-forcednsseed\fR
|
||||
.IP
|
||||
Always query for peer addresses via DNS lookup (default: 0)
|
||||
.HP
|
||||
\fB\-i2pacceptincoming\fR
|
||||
.IP
|
||||
Whether to accept inbound I2P connections (default: 1). Ignored if
|
||||
\fB\-i2psam\fR is not set. Listening for inbound I2P connections is done
|
||||
through the SAM proxy, not by binding to a local address and
|
||||
port.
|
||||
.HP
|
||||
\fB\-i2psam=\fR<ip:port>
|
||||
.IP
|
||||
I2P SAM proxy to reach I2P peers and accept I2P connections (default:
|
||||
none)
|
||||
.HP
|
||||
\fB\-listen\fR
|
||||
.IP
|
||||
Accept connections from outside (default: 1 if no \fB\-proxy\fR, \fB\-connect\fR or
|
||||
\fB\-maxconnections\fR=\fI\,0\/\fR)
|
||||
.HP
|
||||
\fB\-listenonion\fR
|
||||
.IP
|
||||
Automatically create Tor onion service (default: 1)
|
||||
.HP
|
||||
\fB\-maxconnections=\fR<n>
|
||||
.IP
|
||||
Maintain at most <n> automatic connections to peers (default: 125). This
|
||||
limit does not apply to connections manually added via \fB\-addnode\fR
|
||||
or the addnode RPC, which have a separate limit of 8.
|
||||
.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 memory usage for the send buffer, <n>*1000 bytes
|
||||
(default: 1000)
|
||||
.HP
|
||||
\fB\-maxuploadtarget=\fR<n>
|
||||
.IP
|
||||
Tries to keep outbound traffic under the given target per 24h. Limit
|
||||
does not apply to peers with 'download' permission or blocks
|
||||
created within past week. 0 = no limit (default: 0M). Optional
|
||||
suffix units [k|K|m|M|g|G|t|T] (default: M). Lowercase is 1000
|
||||
base while uppercase is 1024 base
|
||||
.HP
|
||||
\fB\-natpmp\fR
|
||||
.IP
|
||||
Use PCP or NAT\-PMP to map the listening port (default: 0)
|
||||
.HP
|
||||
\fB\-networkactive\fR
|
||||
.IP
|
||||
Enable all P2P network activity (default: 1). Can be changed by the
|
||||
setnetworkactive RPC command
|
||||
.HP
|
||||
\fB\-onion=\fR<ip:port|path>
|
||||
.IP
|
||||
Use separate SOCKS5 proxy to reach peers via Tor onion services, set
|
||||
\fB\-noonion\fR to disable (default: \fB\-proxy\fR). May be a local file path
|
||||
prefixed with 'unix:'.
|
||||
.HP
|
||||
\fB\-onlynet=\fR<net>
|
||||
.IP
|
||||
Make automatic outbound connections only to network <net> (ipv4, ipv6,
|
||||
onion, i2p, cjdns). Inbound and manual connections are not
|
||||
affected by this option. It can be specified multiple times to
|
||||
allow multiple networks.
|
||||
.HP
|
||||
\fB\-peerblockfilters\fR
|
||||
.IP
|
||||
Serve compact block filters to peers per BIP 157 (default: 0)
|
||||
.HP
|
||||
\fB\-peerbloomfilters\fR
|
||||
.IP
|
||||
Support filtering of blocks and transaction with bloom filters (default:
|
||||
0)
|
||||
.HP
|
||||
\fB\-port=\fR<port>
|
||||
.IP
|
||||
Listen for connections on <port> (default: 8333, testnet3: 18333,
|
||||
testnet4: 48333, signet: 38333, regtest: 18444). Not relevant for
|
||||
I2P (see doc/i2p.md). If set to a value x, the default onion
|
||||
listening port will be set to x+1.
|
||||
.HP
|
||||
\fB\-proxy=\fR<ip:port|path>
|
||||
.IP
|
||||
Connect through SOCKS5 proxy, set \fB\-noproxy\fR to disable (default:
|
||||
disabled). May be a local file path prefixed with 'unix:' if the
|
||||
proxy supports it.
|
||||
.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. During startup, seednodes will be tried before dnsseeds.
|
||||
.HP
|
||||
\fB\-timeout=\fR<n>
|
||||
.IP
|
||||
Specify socket connection timeout in milliseconds. If an initial attempt
|
||||
to connect is unsuccessful after this amount of time, drop it
|
||||
(minimum: 1, default: 5000)
|
||||
.HP
|
||||
\fB\-torcontrol=\fR<ip>:<port>
|
||||
.IP
|
||||
Tor control host and port to use if onion listening enabled (default:
|
||||
127.0.0.1:9051). If no port is specified, the default port of
|
||||
9051 will be used.
|
||||
.HP
|
||||
\fB\-torpassword=\fR<pass>
|
||||
.IP
|
||||
Tor control port password (default: empty)
|
||||
.HP
|
||||
\fB\-v2transport\fR
|
||||
.IP
|
||||
Support v2 transport (default: 1)
|
||||
.HP
|
||||
\fB\-whitebind=\fR<[permissions@]addr>
|
||||
.IP
|
||||
Bind to the given address and add permission flags to the peers
|
||||
connecting to it. Use [host]:port notation for IPv6. Allowed
|
||||
permissions: bloomfilter (allow requesting BIP37 filtered blocks
|
||||
and transactions), noban (do not ban for misbehavior; implies
|
||||
download), forcerelay (relay transactions that are already in the
|
||||
mempool; implies relay), relay (relay even in \fB\-blocksonly\fR mode,
|
||||
and unlimited transaction announcements), mempool (allow
|
||||
requesting BIP35 mempool contents), download (allow getheaders
|
||||
during IBD, no disconnect after maxuploadtarget limit), addr
|
||||
(responses to GETADDR avoid hitting the cache and contain random
|
||||
records with the most up\-to\-date info). Specify multiple
|
||||
permissions separated by commas (default:
|
||||
download,noban,mempool,relay). Can be specified multiple times.
|
||||
.HP
|
||||
\fB\-whitelist=\fR<[permissions@]IP address or network>
|
||||
.IP
|
||||
Add permission flags to the peers using the given IP address (e.g.
|
||||
1.2.3.4) or CIDR\-notated network (e.g. 1.2.3.0/24). Uses the same
|
||||
permissions as \fB\-whitebind\fR. Additional flags "in" and "out"
|
||||
control whether permissions apply to incoming connections and/or
|
||||
manual (default: incoming only). Can be specified multiple times.
|
||||
.PP
|
||||
Wallet options:
|
||||
.HP
|
||||
\fB\-addresstype\fR
|
||||
.IP
|
||||
What type of addresses to use ("legacy", "p2sh\-segwit", "bech32", or
|
||||
"bech32m", default: "bech32")
|
||||
.HP
|
||||
\fB\-avoidpartialspends\fR
|
||||
.IP
|
||||
Group outputs by address, selecting many (possibly all) or none, instead
|
||||
of selecting on a per\-output basis. Privacy is improved as
|
||||
addresses are mostly swept with fewer transactions and outputs
|
||||
are aggregated in clean change addresses. It may result in higher
|
||||
fees due to less optimal coin selection caused by this added
|
||||
limitation and possibly a larger\-than\-necessary number of inputs
|
||||
being used. Always enabled for wallets with "avoid_reuse"
|
||||
enabled, otherwise default: 0.
|
||||
.HP
|
||||
\fB\-changetype\fR
|
||||
.IP
|
||||
What type of change to use ("legacy", "p2sh\-segwit", "bech32", or
|
||||
"bech32m"). Default is "legacy" when \fB\-addresstype\fR=\fI\,legacy\/\fR, else it
|
||||
is an implementation detail.
|
||||
.HP
|
||||
\fB\-consolidatefeerate=\fR<amt>
|
||||
.IP
|
||||
The maximum feerate (in BTC/kvB) at which transaction building may use
|
||||
more inputs than strictly necessary so that the wallet's UTXO
|
||||
pool can be reduced (default: 0.0001).
|
||||
.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/kvB) 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/kvB) that will be used when fee estimation has
|
||||
insufficient data. 0 to entirely disable the fallbackfee feature.
|
||||
(default: 0.00)
|
||||
.HP
|
||||
\fB\-keypool=\fR<n>
|
||||
.IP
|
||||
Set key pool size to <n> (default: 1000). Warning: Smaller sizes may
|
||||
increase the risk of losing funds when restoring from an old
|
||||
backup, if none of the addresses in the original keypool have
|
||||
been used.
|
||||
.HP
|
||||
\fB\-maxapsfee=\fR<n>
|
||||
.IP
|
||||
Spend up to this amount in additional (absolute) fees (in BTC) if it
|
||||
allows the use of partial spend avoidance (default: 0.00)
|
||||
.HP
|
||||
\fB\-mintxfee=\fR<amt>
|
||||
.IP
|
||||
Fee rates (in BTC/kvB) smaller than this are considered zero fee for
|
||||
transaction creation (default: 0.00001)
|
||||
.HP
|
||||
\fB\-paytxfee=\fR<amt>
|
||||
.IP
|
||||
Fee rate (in BTC/kvB) to add to transactions you send (default: 0.00)
|
||||
.HP
|
||||
\fB\-signer=\fR<cmd>
|
||||
.IP
|
||||
External signing tool, see doc/external\-signer.md
|
||||
.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\-wallet=\fR<path>
|
||||
.IP
|
||||
Specify wallet path to load at startup. Can be used multiple times to
|
||||
load multiple wallets. Path is to a directory containing wallet
|
||||
data and log files. If the path is not absolute, it is
|
||||
interpreted relative to <walletdir>. This only loads existing
|
||||
wallets and does not create new ones. For backwards compatibility
|
||||
this also accepts names of existing top\-level 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, %w is replaced by wallet name, %b is replaced by the
|
||||
hash of the block including the transaction (set to 'unconfirmed'
|
||||
if the transaction is not included) and %h is replaced by the
|
||||
block height (\fB\-1\fR if not included). %w is not currently
|
||||
implemented on windows. On systems where %w is supported, it
|
||||
should NOT be quoted because this would break shell escaping used
|
||||
to invoke the command.
|
||||
.HP
|
||||
\fB\-walletrbf\fR
|
||||
.IP
|
||||
Send transactions with full\-RBF opt\-in enabled (RPC only, default: 1)
|
||||
.PP
|
||||
ZeroMQ notification options:
|
||||
.HP
|
||||
\fB\-zmqpubhashblock=\fR<address>
|
||||
.IP
|
||||
Enable publish hash block in <address>
|
||||
.HP
|
||||
\fB\-zmqpubhashblockhwm=\fR<n>
|
||||
.IP
|
||||
Set publish hash block outbound message high water mark (default: 1000)
|
||||
.HP
|
||||
\fB\-zmqpubhashtx=\fR<address>
|
||||
.IP
|
||||
Enable publish hash transaction in <address>
|
||||
.HP
|
||||
\fB\-zmqpubhashtxhwm=\fR<n>
|
||||
.IP
|
||||
Set publish hash transaction outbound message high water mark (default:
|
||||
1000)
|
||||
.HP
|
||||
\fB\-zmqpubrawblock=\fR<address>
|
||||
.IP
|
||||
Enable publish raw block in <address>
|
||||
.HP
|
||||
\fB\-zmqpubrawblockhwm=\fR<n>
|
||||
.IP
|
||||
Set publish raw block outbound message high water mark (default: 1000)
|
||||
.HP
|
||||
\fB\-zmqpubrawtx=\fR<address>
|
||||
.IP
|
||||
Enable publish raw transaction in <address>
|
||||
.HP
|
||||
\fB\-zmqpubrawtxhwm=\fR<n>
|
||||
.IP
|
||||
Set publish raw transaction outbound message high water mark (default:
|
||||
1000)
|
||||
.HP
|
||||
\fB\-zmqpubsequence=\fR<address>
|
||||
.IP
|
||||
Enable publish hash block and tx sequence in <address>
|
||||
.HP
|
||||
\fB\-zmqpubsequencehwm=\fR<n>
|
||||
.IP
|
||||
Set publish hash sequence message high water mark (default: 1000)
|
||||
.PP
|
||||
Debugging/Testing options:
|
||||
.HP
|
||||
\fB\-debug=\fR<category>
|
||||
.IP
|
||||
Output debug and trace logging (default: \fB\-nodebug\fR, supplying <category>
|
||||
is optional). If <category> is not supplied or if <category> is 1
|
||||
or "all", output all debug logging. If <category> is 0 or "none",
|
||||
any other categories are ignored. Other valid values for
|
||||
<category> are: addrman, bench, blockstorage, cmpctblock, coindb,
|
||||
estimatefee, http, i2p, ipc, leveldb, libevent, mempool,
|
||||
mempoolrej, net, proxy, prune, qt, rand, reindex, rpc, scan,
|
||||
selectcoins, tor, txpackages, txreconciliation, validation,
|
||||
walletdb, zmq. This option can be specified multiple times to
|
||||
output multiple categories.
|
||||
.HP
|
||||
\fB\-debugexclude=\fR<category>
|
||||
.IP
|
||||
Exclude debug and trace logging for a category. Can be used in
|
||||
conjunction with \fB\-debug\fR=\fI\,1\/\fR to output debug and trace logging for
|
||||
all categories except the specified category. This option can be
|
||||
specified multiple times to exclude multiple categories. This
|
||||
takes priority over "\-debug"
|
||||
.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\-loglevelalways\fR
|
||||
.IP
|
||||
Always prepend a category and level (default: 0)
|
||||
.HP
|
||||
\fB\-logsourcelocations\fR
|
||||
.IP
|
||||
Prepend debug output with name of the originating source location
|
||||
(source file, line number and function name) (default: 0)
|
||||
.HP
|
||||
\fB\-logthreadnames\fR
|
||||
.IP
|
||||
Prepend debug output with name of the originating thread (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;
|
||||
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\-chain=\fR<chain>
|
||||
.IP
|
||||
Use the chain <chain> (default: main). Allowed values: main, test,
|
||||
testnet4, signet, regtest
|
||||
.HP
|
||||
\fB\-signet\fR
|
||||
.IP
|
||||
Use the signet chain. Equivalent to \fB\-chain\fR=\fI\,signet\/\fR. Note that the network
|
||||
is defined by the \fB\-signetchallenge\fR parameter
|
||||
.HP
|
||||
\fB\-signetchallenge\fR
|
||||
.IP
|
||||
Blocks must satisfy the given script to be considered valid (only for
|
||||
signet networks; defaults to the global default signet test
|
||||
network challenge)
|
||||
.HP
|
||||
\fB\-signetseednode\fR
|
||||
.IP
|
||||
Specify a seed node for the signet network, in the hostname[:port]
|
||||
format, e.g. sig.net:1234 (may be used multiple times to specify
|
||||
multiple seed nodes; defaults to the global default signet test
|
||||
network seed node(s))
|
||||
.HP
|
||||
\fB\-testnet\fR
|
||||
.IP
|
||||
Use the testnet3 chain. Equivalent to \fB\-chain\fR=\fI\,test\/\fR. Support for testnet3
|
||||
is deprecated and will be removed in an upcoming release.
|
||||
Consider moving to testnet4 now by using \fB\-testnet4\fR.
|
||||
.HP
|
||||
\fB\-testnet4\fR
|
||||
.IP
|
||||
Use the testnet4 chain. Equivalent to \fB\-chain\fR=\fI\,testnet4\/\fR.
|
||||
.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
|
||||
Relay and mine transactions whose data\-carrying raw scriptPubKey is of
|
||||
this size or less (default: 83)
|
||||
.HP
|
||||
\fB\-minrelaytxfee=\fR<amt>
|
||||
.IP
|
||||
Fees (in BTC/kvB) smaller than this are considered zero fee for
|
||||
relaying, mining and transaction creation (default: 0.000001)
|
||||
.HP
|
||||
\fB\-permitbaremultisig\fR
|
||||
.IP
|
||||
Relay transactions creating non\-P2SH multisig outputs (default: 1)
|
||||
.HP
|
||||
\fB\-whitelistforcerelay\fR
|
||||
.IP
|
||||
Add 'forcerelay' permission to whitelisted peers with default
|
||||
permissions. This will relay transactions even if the
|
||||
transactions were already in the mempool. (default: 0)
|
||||
.HP
|
||||
\fB\-whitelistrelay\fR
|
||||
.IP
|
||||
Add 'relay' permission to whitelisted peers with default permissions.
|
||||
This will accept relayed transactions even when not relaying
|
||||
transactions (default: 1)
|
||||
.PP
|
||||
Block creation options:
|
||||
.HP
|
||||
\fB\-blockmaxweight=\fR<n>
|
||||
.IP
|
||||
Set maximum BIP141 block weight (default: 4000000)
|
||||
.HP
|
||||
\fB\-blockmintxfee=\fR<amt>
|
||||
.IP
|
||||
Set lowest fee rate (in BTC/kvB) for transactions to be included in
|
||||
block creation. (default: 0.00000001)
|
||||
.HP
|
||||
\fB\-blockreservedweight=\fR<n>
|
||||
.IP
|
||||
Reserve space for the fixed\-size block header plus the largest coinbase
|
||||
transaction the mining software may add to the block. (default:
|
||||
8000).
|
||||
.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 values 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), a network/CIDR (e.g. 1.2.3.4/24), all
|
||||
ipv4 (0.0.0.0/0), or all ipv6 (::/0). 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\-rpccookieperms=\fR<readable\-by>
|
||||
.IP
|
||||
Set permissions on the RPC auth cookie file so that it is readable by
|
||||
[owner|group|all] (default: owner [via umask 0077])
|
||||
.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, testnet3:
|
||||
18332, testnet4: 48332, signet: 38332, regtest: 18443)
|
||||
.HP
|
||||
\fB\-rpcthreads=\fR<n>
|
||||
.IP
|
||||
Set the number of threads to service RPC calls (default: 16)
|
||||
.HP
|
||||
\fB\-rpcuser=\fR<user>
|
||||
.IP
|
||||
Username for JSON\-RPC connections
|
||||
.HP
|
||||
\fB\-rpcwhitelist=\fR<whitelist>
|
||||
.IP
|
||||
Set a whitelist to filter incoming RPC calls for a specific user. The
|
||||
field <whitelist> comes in the format: <USERNAME>:<rpc 1>,<rpc
|
||||
2>,...,<rpc n>. If multiple whitelists are set for a given user,
|
||||
they are set\-intersected. See \fB\-rpcwhitelistdefault\fR documentation
|
||||
for information on default whitelist behavior.
|
||||
.HP
|
||||
\fB\-rpcwhitelistdefault\fR
|
||||
.IP
|
||||
Sets default behavior for rpc whitelisting. Unless rpcwhitelistdefault
|
||||
is set to 0, if any \fB\-rpcwhitelist\fR is set, the rpc server acts as
|
||||
if all rpc users are subject to empty\-unless\-otherwise\-specified
|
||||
whitelists. If rpcwhitelistdefault is set to 1 and no
|
||||
\fB\-rpcwhitelist\fR is set, rpc server acts as if all rpc users are
|
||||
subject to empty whitelists.
|
||||
.HP
|
||||
\fB\-server\fR
|
||||
.IP
|
||||
Accept command line and JSON\-RPC commands
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2009-2025 The Bitcoin Core developers
|
||||
|
||||
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>
|
||||
.SH "SEE ALSO"
|
||||
bitcoind(1), bitcoin-cli(1), bitcoin-tx(1), bitcoin-wallet(1), bitcoin-util(1), bitcoin-qt(1)
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
Bitcoin Core version 29.x is now available from:
|
||||
Bitcoin Core version 29.2rc1 is now available from:
|
||||
|
||||
<https://bitcoincore.org/bin/bitcoin-core-29.x/>
|
||||
<https://bitcoincore.org/bin/bitcoin-core-29.2/test.rc1/>
|
||||
|
||||
This release includes various bug fixes and performance
|
||||
improvements, as well as updated translations.
|
||||
|
|
@ -37,19 +37,37 @@ unsupported systems.
|
|||
Notable changes
|
||||
===============
|
||||
|
||||
### P2P
|
||||
|
||||
- #32646 p2p: Add witness mutation check inside FillBlock
|
||||
- #33296 net: check for empty header before calling FillBlock
|
||||
- #33395 net: do not apply whitelist permissions to onion inbounds
|
||||
|
||||
### CI
|
||||
|
||||
- #32999 ci: Use APT_LLVM_V in msan task
|
||||
- #33099 ci: allow for any libc++ intrumentation & use it for TSAN
|
||||
- #33258 ci: use LLVM 21
|
||||
- #33364 ci: always use tag for LLVM checkout
|
||||
|
||||
### Misc
|
||||
|
||||
- #33310 trace: Workaround GCC bug compiling with old systemtap
|
||||
- #33340 Fix benchmark CSV output
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Thanks to everyone who directly contributed to this release:
|
||||
|
||||
- Eugene Siegel
|
||||
- fanquake
|
||||
- Greg Sanders
|
||||
- Hennadii Stepanov
|
||||
- Luke Dashjr
|
||||
- MarcoFalke
|
||||
- Martin Zumsande
|
||||
- Vasil Dimov
|
||||
|
||||
As well as to everyone that helped with translations on
|
||||
[Transifex](https://explore.transifex.com/bitcoin/bitcoin/).
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ bool PartiallyDownloadedBlock::IsTxAvailable(size_t index) const
|
|||
return txn_available[index] != nullptr;
|
||||
}
|
||||
|
||||
ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock& block, const std::vector<CTransactionRef>& vtx_missing, bool check_pow)
|
||||
ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock& block, const std::vector<CTransactionRef>& vtx_missing, bool segwit_active)
|
||||
{
|
||||
if (header.IsNull()) return READ_STATUS_INVALID;
|
||||
|
||||
|
|
@ -211,16 +211,11 @@ ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock& block, const std::vector<
|
|||
if (vtx_missing.size() != tx_missing_offset)
|
||||
return READ_STATUS_INVALID;
|
||||
|
||||
BlockValidationState state;
|
||||
CheckBlockFn check_block = m_check_block_mock ? m_check_block_mock : CheckBlock;
|
||||
if (!check_block(block, state, Params().GetConsensus(), /*fCheckPoW=*/check_pow, /*fCheckMerkleRoot=*/true)) {
|
||||
// TODO: We really want to just check merkle tree manually here,
|
||||
// but that is expensive, and CheckBlock caches a block's
|
||||
// "checked-status" (in the CBlock?). CBlock should be able to
|
||||
// check its own merkle root and cache that check.
|
||||
if (state.GetResult() == BlockValidationResult::BLOCK_MUTATED)
|
||||
return READ_STATUS_FAILED; // Possible Short ID collision
|
||||
return READ_STATUS_CHECKBLOCK_FAILED;
|
||||
// Check for possible mutations early now that we have a seemingly good block
|
||||
IsBlockMutatedFn check_mutated{m_check_block_mutated_mock ? m_check_block_mutated_mock : IsBlockMutated};
|
||||
if (check_mutated(/*block=*/block,
|
||||
/*check_witness_root=*/segwit_active)) {
|
||||
return READ_STATUS_FAILED; // Possible Short ID collision
|
||||
}
|
||||
|
||||
LogDebug(BCLog::CMPCTBLOCK, "Successfully reconstructed block %s with %lu txn prefilled, %lu txn from mempool (incl at least %lu from extra pool) and %lu txn requested\n", hash.ToString(), prefilled_count, mempool_count, extra_count, vtx_missing.size());
|
||||
|
|
|
|||
|
|
@ -84,8 +84,6 @@ typedef enum ReadStatus_t
|
|||
READ_STATUS_OK,
|
||||
READ_STATUS_INVALID, // Invalid object, peer is sending bogus crap
|
||||
READ_STATUS_FAILED, // Failed to process object
|
||||
READ_STATUS_CHECKBLOCK_FAILED, // Used only by FillBlock to indicate a
|
||||
// failure in CheckBlock.
|
||||
} ReadStatus;
|
||||
|
||||
class CBlockHeaderAndShortTxIDs {
|
||||
|
|
@ -141,8 +139,8 @@ public:
|
|||
CBlockHeader header;
|
||||
|
||||
// Can be overridden for testing
|
||||
using CheckBlockFn = std::function<bool(const CBlock&, BlockValidationState&, const Consensus::Params&, bool, bool)>;
|
||||
CheckBlockFn m_check_block_mock{nullptr};
|
||||
using IsBlockMutatedFn = std::function<bool(const CBlock&, bool)>;
|
||||
IsBlockMutatedFn m_check_block_mutated_mock{nullptr};
|
||||
|
||||
explicit PartiallyDownloadedBlock(CTxMemPool* poolIn) : pool(poolIn) {}
|
||||
|
||||
|
|
@ -150,7 +148,8 @@ public:
|
|||
// extra_txn is a list of extra orphan/conflicted/etc transactions to look at
|
||||
ReadStatus InitData(const CBlockHeaderAndShortTxIDs& cmpctblock, const std::vector<CTransactionRef>& extra_txn);
|
||||
bool IsTxAvailable(size_t index) const;
|
||||
ReadStatus FillBlock(CBlock& block, const std::vector<CTransactionRef>& vtx_missing, bool check_pow = true);
|
||||
// segwit_active enforces witness mutation checks just before reporting a healthy status
|
||||
ReadStatus FillBlock(CBlock& block, const std::vector<CTransactionRef>& vtx_missing, bool segwit_active);
|
||||
};
|
||||
|
||||
#endif // BITCOIN_BLOCKENCODINGS_H
|
||||
|
|
|
|||
|
|
@ -627,7 +627,7 @@ std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implem
|
|||
Transform = sha256_x86_shani::Transform;
|
||||
TransformD64 = TransformD64Wrapper<sha256_x86_shani::Transform>;
|
||||
TransformD64_2way = sha256d64_x86_shani::Transform_2way;
|
||||
ret = "x86_shani(1way,2way)";
|
||||
ret = "x86_shani(1way;2way)";
|
||||
have_sse4 = false; // Disable SSE4/AVX2;
|
||||
have_avx2 = false;
|
||||
}
|
||||
|
|
@ -641,14 +641,14 @@ std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implem
|
|||
#endif
|
||||
#if defined(ENABLE_SSE41)
|
||||
TransformD64_4way = sha256d64_sse41::Transform_4way;
|
||||
ret += ",sse41(4way)";
|
||||
ret += ";sse41(4way)";
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(ENABLE_AVX2)
|
||||
if (have_avx2 && have_avx && enabled_avx) {
|
||||
TransformD64_8way = sha256d64_avx2::Transform_8way;
|
||||
ret += ",avx2(8way)";
|
||||
ret += ";avx2(8way)";
|
||||
}
|
||||
#endif
|
||||
#endif // defined(HAVE_GETCPUID)
|
||||
|
|
@ -682,7 +682,7 @@ std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implem
|
|||
Transform = sha256_arm_shani::Transform;
|
||||
TransformD64 = TransformD64Wrapper<sha256_arm_shani::Transform>;
|
||||
TransformD64_2way = sha256d64_arm_shani::Transform_2way;
|
||||
ret = "arm_shani(1way,2way)";
|
||||
ret = "arm_shani(1way;2way)";
|
||||
}
|
||||
#endif
|
||||
#endif // DISABLE_OPTIMIZED_SHA256
|
||||
|
|
|
|||
11
src/net.cpp
11
src/net.cpp
|
|
@ -575,9 +575,9 @@ void CNode::CloseSocketDisconnect()
|
|||
m_i2p_sam_session.reset();
|
||||
}
|
||||
|
||||
void CConnman::AddWhitelistPermissionFlags(NetPermissionFlags& flags, const CNetAddr &addr, const std::vector<NetWhitelistPermissions>& ranges) const {
|
||||
void CConnman::AddWhitelistPermissionFlags(NetPermissionFlags& flags, std::optional<CNetAddr> addr, const std::vector<NetWhitelistPermissions>& ranges) const {
|
||||
for (const auto& subnet : ranges) {
|
||||
if (subnet.m_subnet.Match(addr)) {
|
||||
if (addr.has_value() && subnet.m_subnet.Match(addr.value())) {
|
||||
NetPermissions::AddFlag(flags, subnet.m_flags);
|
||||
}
|
||||
}
|
||||
|
|
@ -1767,7 +1767,11 @@ void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock,
|
|||
{
|
||||
int nInbound = 0;
|
||||
|
||||
AddWhitelistPermissionFlags(permission_flags, addr, vWhitelistedRangeIncoming);
|
||||
const bool inbound_onion = std::find(m_onion_binds.begin(), m_onion_binds.end(), addr_bind) != m_onion_binds.end();
|
||||
|
||||
// Tor inbound connections do not reveal the peer's actual network address.
|
||||
// Therefore do not apply address-based whitelist permissions to them.
|
||||
AddWhitelistPermissionFlags(permission_flags, inbound_onion ? std::optional<CNetAddr>{} : addr, vWhitelistedRangeIncoming);
|
||||
|
||||
{
|
||||
LOCK(m_nodes_mutex);
|
||||
|
|
@ -1822,7 +1826,6 @@ void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock,
|
|||
NodeId id = GetNewNodeId();
|
||||
uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize();
|
||||
|
||||
const bool inbound_onion = std::find(m_onion_binds.begin(), m_onion_binds.end(), addr_bind) != m_onion_binds.end();
|
||||
// The V2Transport transparently falls back to V1 behavior when an incoming V1 connection is
|
||||
// detected, so use it whenever we signal NODE_P2P_V2.
|
||||
ServiceFlags local_services = GetLocalServices();
|
||||
|
|
|
|||
|
|
@ -1364,7 +1364,7 @@ private:
|
|||
|
||||
bool AttemptToEvictConnection();
|
||||
CNode* ConnectNode(CAddress addrConnect, const char *pszDest, bool fCountFailure, ConnectionType conn_type, bool use_v2transport) EXCLUSIVE_LOCKS_REQUIRED(!m_unused_i2p_sessions_mutex);
|
||||
void AddWhitelistPermissionFlags(NetPermissionFlags& flags, const CNetAddr &addr, const std::vector<NetWhitelistPermissions>& ranges) const;
|
||||
void AddWhitelistPermissionFlags(NetPermissionFlags& flags, std::optional<CNetAddr> addr, const std::vector<NetWhitelistPermissions>& ranges) const;
|
||||
|
||||
void DeleteNode(CNode* pnode);
|
||||
|
||||
|
|
|
|||
|
|
@ -3375,7 +3375,21 @@ void PeerManagerImpl::ProcessCompactBlockTxns(CNode& pfrom, Peer& peer, const Bl
|
|||
}
|
||||
|
||||
PartiallyDownloadedBlock& partialBlock = *range_flight.first->second.second->partialBlock;
|
||||
ReadStatus status = partialBlock.FillBlock(*pblock, block_transactions.txn);
|
||||
|
||||
if (partialBlock.header.IsNull()) {
|
||||
// It is possible for the header to be empty if a previous call to FillBlock wiped the header, but left
|
||||
// the PartiallyDownloadedBlock pointer around (i.e. did not call RemoveBlockRequest). In this case, we
|
||||
// should not call LookupBlockIndex below.
|
||||
RemoveBlockRequest(block_transactions.blockhash, pfrom.GetId());
|
||||
Misbehaving(peer, "previous compact block reconstruction attempt failed");
|
||||
LogDebug(BCLog::NET, "Peer %d sent compact block transactions multiple times", pfrom.GetId());
|
||||
return;
|
||||
}
|
||||
|
||||
// We should not have gotten this far in compact block processing unless it's attached to a known header
|
||||
const CBlockIndex* prev_block{Assume(m_chainman.m_blockman.LookupBlockIndex(partialBlock.header.hashPrevBlock))};
|
||||
ReadStatus status = partialBlock.FillBlock(*pblock, block_transactions.txn,
|
||||
/*segwit_active=*/DeploymentActiveAfter(prev_block, m_chainman, Consensus::DEPLOYMENT_SEGWIT));
|
||||
if (status == READ_STATUS_INVALID) {
|
||||
RemoveBlockRequest(block_transactions.blockhash, pfrom.GetId()); // Reset in-flight state in case Misbehaving does not result in a disconnect
|
||||
Misbehaving(peer, "invalid compact block/non-matching block transactions");
|
||||
|
|
@ -3383,6 +3397,9 @@ void PeerManagerImpl::ProcessCompactBlockTxns(CNode& pfrom, Peer& peer, const Bl
|
|||
} else if (status == READ_STATUS_FAILED) {
|
||||
if (first_in_flight) {
|
||||
// Might have collided, fall back to getdata now :(
|
||||
// We keep the failed partialBlock to disallow processing another compact block announcement from the same
|
||||
// peer for the same block. We let the full block download below continue under the same m_downloading_since
|
||||
// timer.
|
||||
std::vector<CInv> invs;
|
||||
invs.emplace_back(MSG_BLOCK | GetFetchFlags(peer), block_transactions.blockhash);
|
||||
MakeAndPushMessage(pfrom, NetMsgType::GETDATA, invs);
|
||||
|
|
@ -3392,23 +3409,7 @@ void PeerManagerImpl::ProcessCompactBlockTxns(CNode& pfrom, Peer& peer, const Bl
|
|||
return;
|
||||
}
|
||||
} else {
|
||||
// Block is either okay, or possibly we received
|
||||
// READ_STATUS_CHECKBLOCK_FAILED.
|
||||
// Note that CheckBlock can only fail for one of a few reasons:
|
||||
// 1. bad-proof-of-work (impossible here, because we've already
|
||||
// accepted the header)
|
||||
// 2. merkleroot doesn't match the transactions given (already
|
||||
// caught in FillBlock with READ_STATUS_FAILED, so
|
||||
// impossible here)
|
||||
// 3. the block is otherwise invalid (eg invalid coinbase,
|
||||
// block is too big, too many legacy sigops, etc).
|
||||
// So if CheckBlock failed, #3 is the only possibility.
|
||||
// Under BIP 152, we don't discourage the peer unless proof of work is
|
||||
// invalid (we don't require all the stateless checks to have
|
||||
// been run). This is handled below, so just treat this as
|
||||
// though the block was successfully read, and rely on the
|
||||
// handling in ProcessNewBlock to ensure the block index is
|
||||
// updated, etc.
|
||||
// Block is okay for further processing
|
||||
RemoveBlockRequest(block_transactions.blockhash, pfrom.GetId()); // it is now an empty pointer
|
||||
fBlockRead = true;
|
||||
// mapBlockSource is used for potentially punishing peers and
|
||||
|
|
@ -4538,7 +4539,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||
return;
|
||||
}
|
||||
std::vector<CTransactionRef> dummy;
|
||||
status = tempBlock.FillBlock(*pblock, dummy);
|
||||
const CBlockIndex* prev_block{Assume(m_chainman.m_blockman.LookupBlockIndex(cmpctblock.header.hashPrevBlock))};
|
||||
status = tempBlock.FillBlock(*pblock, dummy,
|
||||
/*segwit_active=*/DeploymentActiveAfter(prev_block, m_chainman, Consensus::DEPLOYMENT_SEGWIT));
|
||||
if (status == READ_STATUS_OK) {
|
||||
fBlockReconstructed = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1471,13 +1471,11 @@ static RPCHelpMan consumecompactsketch()
|
|||
if (req.indexes.empty()) {
|
||||
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
|
||||
std::vector<CTransactionRef> dummy;
|
||||
ReadStatus status = partialBlock.FillBlock(*pblock, dummy, false /* don't get pow */);
|
||||
ReadStatus status = partialBlock.FillBlock(*pblock, dummy, /*segwit_active=*/true);
|
||||
if (status == READ_STATUS_INVALID) {
|
||||
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Bogus crap sketch.");
|
||||
} else if (status == READ_STATUS_FAILED) {
|
||||
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Failed to complete block though all transactions were apparently found. Could be random short ID collision; requires full block instead.");
|
||||
} else if (status == READ_STATUS_CHECKBLOCK_FAILED) {
|
||||
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Checkblock failed.");
|
||||
}
|
||||
DataStream ssBlock{};
|
||||
ssBlock << TX_WITH_WITNESS(*pblock);
|
||||
|
|
|
|||
|
|
@ -95,21 +95,21 @@ BOOST_AUTO_TEST_CASE(SimpleRoundTripTest)
|
|||
CBlock block2;
|
||||
{
|
||||
PartiallyDownloadedBlock tmp = partialBlock;
|
||||
BOOST_CHECK(partialBlock.FillBlock(block2, {}) == READ_STATUS_INVALID); // No transactions
|
||||
BOOST_CHECK(partialBlock.FillBlock(block2, {}, /*segwit_active=*/true) == READ_STATUS_INVALID); // No transactions
|
||||
partialBlock = tmp;
|
||||
}
|
||||
|
||||
// Wrong transaction
|
||||
{
|
||||
PartiallyDownloadedBlock tmp = partialBlock;
|
||||
partialBlock.FillBlock(block2, {block.vtx[2]}); // Current implementation doesn't check txn here, but don't require that
|
||||
partialBlock.FillBlock(block2, {block.vtx[2]}, /*segwit_active=*/true); // Current implementation doesn't check txn here, but don't require that
|
||||
partialBlock = tmp;
|
||||
}
|
||||
bool mutated;
|
||||
BOOST_CHECK(block.hashMerkleRoot != BlockMerkleRoot(block2, &mutated));
|
||||
|
||||
CBlock block3;
|
||||
BOOST_CHECK(partialBlock.FillBlock(block3, {block.vtx[1]}) == READ_STATUS_OK);
|
||||
BOOST_CHECK(partialBlock.FillBlock(block3, {block.vtx[1]}, /*segwit_active=*/true) == READ_STATUS_OK);
|
||||
BOOST_CHECK_EQUAL(block.GetHash().ToString(), block3.GetHash().ToString());
|
||||
BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block3, &mutated).ToString());
|
||||
BOOST_CHECK(!mutated);
|
||||
|
|
@ -182,14 +182,14 @@ BOOST_AUTO_TEST_CASE(NonCoinbasePreforwardRTTest)
|
|||
CBlock block2;
|
||||
{
|
||||
PartiallyDownloadedBlock tmp = partialBlock;
|
||||
BOOST_CHECK(partialBlock.FillBlock(block2, {}) == READ_STATUS_INVALID); // No transactions
|
||||
BOOST_CHECK(partialBlock.FillBlock(block2, {}, /*segwit_active=*/true) == READ_STATUS_INVALID); // No transactions
|
||||
partialBlock = tmp;
|
||||
}
|
||||
|
||||
// Wrong transaction
|
||||
{
|
||||
PartiallyDownloadedBlock tmp = partialBlock;
|
||||
partialBlock.FillBlock(block2, {block.vtx[1]}); // Current implementation doesn't check txn here, but don't require that
|
||||
partialBlock.FillBlock(block2, {block.vtx[1]}, /*segwit_active=*/true); // Current implementation doesn't check txn here, but don't require that
|
||||
partialBlock = tmp;
|
||||
}
|
||||
BOOST_CHECK_EQUAL(pool.get(block.vtx[2]->GetHash()).use_count(), SHARED_TX_OFFSET + 2); // +2 because of partialBlock and block2
|
||||
|
|
@ -198,7 +198,7 @@ BOOST_AUTO_TEST_CASE(NonCoinbasePreforwardRTTest)
|
|||
|
||||
CBlock block3;
|
||||
PartiallyDownloadedBlock partialBlockCopy = partialBlock;
|
||||
BOOST_CHECK(partialBlock.FillBlock(block3, {block.vtx[0]}) == READ_STATUS_OK);
|
||||
BOOST_CHECK(partialBlock.FillBlock(block3, {block.vtx[0]}, /*segwit_active=*/true) == READ_STATUS_OK);
|
||||
BOOST_CHECK_EQUAL(block.GetHash().ToString(), block3.GetHash().ToString());
|
||||
BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block3, &mutated).ToString());
|
||||
BOOST_CHECK(!mutated);
|
||||
|
|
@ -252,7 +252,7 @@ BOOST_AUTO_TEST_CASE(SufficientPreforwardRTTest)
|
|||
|
||||
CBlock block2;
|
||||
PartiallyDownloadedBlock partialBlockCopy = partialBlock;
|
||||
BOOST_CHECK(partialBlock.FillBlock(block2, {}) == READ_STATUS_OK);
|
||||
BOOST_CHECK(partialBlock.FillBlock(block2, {}, /*segwit_active=*/true) == READ_STATUS_OK);
|
||||
BOOST_CHECK_EQUAL(block.GetHash().ToString(), block2.GetHash().ToString());
|
||||
bool mutated;
|
||||
BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block2, &mutated).ToString());
|
||||
|
|
@ -300,7 +300,7 @@ BOOST_AUTO_TEST_CASE(EmptyBlockRoundTripTest)
|
|||
|
||||
CBlock block2;
|
||||
std::vector<CTransactionRef> vtx_missing;
|
||||
BOOST_CHECK(partialBlock.FillBlock(block2, vtx_missing) == READ_STATUS_OK);
|
||||
BOOST_CHECK(partialBlock.FillBlock(block2, vtx_missing, /*segwit_active=*/true) == READ_STATUS_OK);
|
||||
BOOST_CHECK_EQUAL(block.GetHash().ToString(), block2.GetHash().ToString());
|
||||
BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block2, &mutated).ToString());
|
||||
BOOST_CHECK(!mutated);
|
||||
|
|
|
|||
|
|
@ -32,14 +32,10 @@ void initialize_pdb()
|
|||
g_setup = testing_setup.get();
|
||||
}
|
||||
|
||||
PartiallyDownloadedBlock::CheckBlockFn FuzzedCheckBlock(std::optional<BlockValidationResult> result)
|
||||
PartiallyDownloadedBlock::IsBlockMutatedFn FuzzedIsBlockMutated(bool result)
|
||||
{
|
||||
return [result](const CBlock&, BlockValidationState& state, const Consensus::Params&, bool, bool) {
|
||||
if (result) {
|
||||
return state.Invalid(*result);
|
||||
}
|
||||
|
||||
return true;
|
||||
return [result](const CBlock& block, bool) {
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -111,36 +107,22 @@ FUZZ_TARGET(partially_downloaded_block, .init = initialize_pdb)
|
|||
skipped_missing |= (!pdb.IsTxAvailable(i) && skip);
|
||||
}
|
||||
|
||||
// Mock CheckBlock
|
||||
bool fail_check_block{fuzzed_data_provider.ConsumeBool()};
|
||||
auto validation_result =
|
||||
fuzzed_data_provider.PickValueInArray(
|
||||
{BlockValidationResult::BLOCK_RESULT_UNSET,
|
||||
BlockValidationResult::BLOCK_CONSENSUS,
|
||||
BlockValidationResult::BLOCK_CACHED_INVALID,
|
||||
BlockValidationResult::BLOCK_INVALID_HEADER,
|
||||
BlockValidationResult::BLOCK_MUTATED,
|
||||
BlockValidationResult::BLOCK_MISSING_PREV,
|
||||
BlockValidationResult::BLOCK_INVALID_PREV,
|
||||
BlockValidationResult::BLOCK_TIME_FUTURE,
|
||||
BlockValidationResult::BLOCK_CHECKPOINT,
|
||||
BlockValidationResult::BLOCK_HEADER_LOW_WORK});
|
||||
pdb.m_check_block_mock = FuzzedCheckBlock(
|
||||
fail_check_block ?
|
||||
std::optional<BlockValidationResult>{validation_result} :
|
||||
std::nullopt);
|
||||
bool segwit_active{fuzzed_data_provider.ConsumeBool()};
|
||||
|
||||
// Mock IsBlockMutated
|
||||
bool fail_block_mutated{fuzzed_data_provider.ConsumeBool()};
|
||||
pdb.m_check_block_mutated_mock = FuzzedIsBlockMutated(fail_block_mutated);
|
||||
|
||||
CBlock reconstructed_block;
|
||||
auto fill_status{pdb.FillBlock(reconstructed_block, missing)};
|
||||
auto fill_status{pdb.FillBlock(reconstructed_block, missing, segwit_active)};
|
||||
switch (fill_status) {
|
||||
case READ_STATUS_OK:
|
||||
assert(!skipped_missing);
|
||||
assert(!fail_check_block);
|
||||
assert(!fail_block_mutated);
|
||||
assert(block->GetHash() == reconstructed_block.GetHash());
|
||||
break;
|
||||
case READ_STATUS_CHECKBLOCK_FAILED: [[fallthrough]];
|
||||
case READ_STATUS_FAILED:
|
||||
assert(fail_check_block);
|
||||
assert(fail_block_mutated);
|
||||
break;
|
||||
case READ_STATUS_INVALID:
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,13 @@
|
|||
|
||||
#ifdef ENABLE_TRACING
|
||||
|
||||
// Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103395
|
||||
// systemtap 4.6 on 32-bit ARM triggers internal compiler error
|
||||
// (this workaround is included in systemtap 4.7+)
|
||||
#if defined(__arm__)
|
||||
# define STAP_SDT_ARG_CONSTRAINT g
|
||||
#endif
|
||||
|
||||
// Setting SDT_USE_VARIADIC lets systemtap (sys/sdt.h) know that we want to use
|
||||
// the optional variadic macros to define tracepoints.
|
||||
#define SDT_USE_VARIADIC 1
|
||||
|
|
|
|||
|
|
@ -568,6 +568,42 @@ class CompactBlocksTest(BitcoinTestFramework):
|
|||
test_node.send_and_ping(msg_block(block))
|
||||
assert_equal(int(node.getbestblockhash(), 16), block.sha256)
|
||||
|
||||
# Multiple blocktxn responses will cause a node to get disconnected.
|
||||
def test_multiple_blocktxn_response(self, test_node):
|
||||
node = self.nodes[0]
|
||||
utxo = self.utxos[0]
|
||||
|
||||
block = self.build_block_with_transactions(node, utxo, 2)
|
||||
|
||||
# Send compact block
|
||||
comp_block = HeaderAndShortIDs()
|
||||
comp_block.initialize_from_block(block, prefill_list=[0], use_witness=True)
|
||||
test_node.send_and_ping(msg_cmpctblock(comp_block.to_p2p()))
|
||||
absolute_indexes = []
|
||||
with p2p_lock:
|
||||
assert "getblocktxn" in test_node.last_message
|
||||
absolute_indexes = test_node.last_message["getblocktxn"].block_txn_request.to_absolute()
|
||||
assert_equal(absolute_indexes, [1, 2])
|
||||
|
||||
# Send a blocktxn that does not succeed in reconstruction, triggering
|
||||
# getdata fallback.
|
||||
msg = msg_blocktxn()
|
||||
msg.block_transactions = BlockTransactions(block.sha256, [block.vtx[2]] + [block.vtx[1]])
|
||||
test_node.send_and_ping(msg)
|
||||
|
||||
# Tip should not have updated
|
||||
assert_equal(int(node.getbestblockhash(), 16), block.hashPrevBlock)
|
||||
|
||||
# We should receive a getdata request
|
||||
test_node.wait_for_getdata([block.sha256], timeout=10)
|
||||
assert test_node.last_message["getdata"].inv[0].type == MSG_BLOCK or \
|
||||
test_node.last_message["getdata"].inv[0].type == MSG_BLOCK | MSG_WITNESS_FLAG
|
||||
|
||||
# Send the same blocktxn and assert the sender gets disconnected.
|
||||
with node.assert_debug_log(['previous compact block reconstruction attempt failed']):
|
||||
test_node.send_message(msg)
|
||||
test_node.wait_for_disconnect()
|
||||
|
||||
def test_getblocktxn_handler(self, test_node):
|
||||
node = self.nodes[0]
|
||||
# bitcoind will not send blocktxn responses for blocks whose height is
|
||||
|
|
@ -961,6 +997,12 @@ class CompactBlocksTest(BitcoinTestFramework):
|
|||
self.log.info("Testing handling of invalid compact blocks...")
|
||||
self.test_invalid_tx_in_compactblock(self.segwit_node)
|
||||
|
||||
self.log.info("Testing handling of multiple blocktxn responses...")
|
||||
self.test_multiple_blocktxn_response(self.segwit_node)
|
||||
|
||||
# The previous test will lead to a disconnection. Reconnect before continuing.
|
||||
self.segwit_node = self.nodes[0].add_p2p_connection(TestP2PConn())
|
||||
|
||||
self.log.info("Testing invalid index in cmpctblock message...")
|
||||
self.test_invalid_cmpctblock_message()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue