diff --git a/qa/pull-tester/rpc-tests.py b/qa/pull-tester/rpc-tests.py
index 72200a696..33755dca4 100755
--- a/qa/pull-tester/rpc-tests.py
+++ b/qa/pull-tester/rpc-tests.py
@@ -144,6 +144,7 @@ BASE_SCRIPTS= [
'wallet_z_sendmany.py',
'wallet_zero_value.py',
'threeofthreerestore.py',
+ 'show_help.py',
]
ZMQ_SCRIPTS = [
diff --git a/qa/rpc-tests/show_help.py b/qa/rpc-tests/show_help.py
new file mode 100755
index 000000000..ff8458261
--- /dev/null
+++ b/qa/rpc-tests/show_help.py
@@ -0,0 +1,504 @@
+#!/usr/bin/env python3
+# Copyright (c) 2014-2016 The Bitcoin Core developers
+# Copyright (c) 2017-2022 The Zcash developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or https://www.opensource.org/licenses/mit-license.php .
+
+#
+# Test --help
+#
+
+from test_framework.test_framework import BitcoinTestFramework
+from test_framework.util import assert_equal, assert_true, zcashd_binary
+import subprocess
+import tempfile
+import time
+
+help_message = """
+In order to ensure you are adequately protecting your privacy when using Zcash,
+please see .
+
+Usage:
+ zcashd [options] Start Zcash Daemon
+
+Options:
+
+ -?
+ This help message
+
+ -alerts
+ Receive and display P2P network alerts (default: 1)
+
+ -alertnotify=
+ Execute command when a relevant alert is received or we see a really
+ long fork (%s in cmd is replaced by message)
+
+ -allowdeprecated=
+ Explicitly allow the use of the specified deprecated feature. Multiple
+ instances of this parameter are permitted; values for must be
+ selected from among {"none", "addrtype", "getnewaddress",
+ "getrawchangeaddress", "legacy_privacy", "wallettxvjoinsplit",
+ "z_getbalance", "z_getnewaddress", "z_gettotalbalance",
+ "z_listaddresses", "dumpwallet", "zcrawjoinsplit", "zcrawkeygen",
+ "zcrawreceive"}
+
+ -blocknotify=
+ Execute command when the best block changes (%s in cmd is replaced by
+ block hash)
+
+ -checkblocks=
+ How many blocks to check at startup (default: 288, 0 = all)
+
+ -checklevel=
+ How thorough the block verification of -checkblocks is (0-4, default: 3)
+
+ -conf=
+ Specify configuration file (default: zcash.conf)
+
+ -daemon
+ Run in the background as a daemon and accept commands
+
+ -datadir=
+ Specify data directory (this path cannot use '~')
+
+ -paramsdir=
+ Specify Zcash network parameters directory
+
+ -dbcache=
+ Set database cache size in megabytes (4 to 16384, default: 450)
+
+ -debuglogfile=
+ Specify location of debug log file: this can be an absolute path or a
+ path relative to the data directory (default: debug.log)
+
+ -exportdir=
+ Specify directory to be used when exporting data
+
+ -ibdskiptxverification
+ Skip transaction verification during initial block download up to the
+ last checkpoint height. Incompatible with flags that disable
+ checkpoints. (default = 0)
+
+ -loadblock=
+ Imports blocks from external blk000??.dat file on startup
+
+ -maxorphantx=
+ Keep at most unconnectable transactions in memory (default: 100)
+
+ -par=
+ Set the number of script verification threads (-8 to 16, 0 = auto, <0 =
+ leave that many cores free, default: 0)
+
+ -pid=
+ Specify pid file (default: zcashd.pid)
+
+ -prune=
+ Reduce storage requirements by pruning (deleting) old blocks. This mode
+ disables wallet support and is incompatible with -txindex. Warning:
+ Reverting this setting requires re-downloading the entire blockchain.
+ (default: 0 = disable pruning blocks, >550 = target size in MiB to use
+ for block files)
+
+ -reindex-chainstate
+ Rebuild chain state from the currently indexed blocks (implies -rescan)
+
+ -reindex
+ Rebuild chain state and block index from the blk*.dat files on disk
+ (implies -rescan)
+
+ -sysperms
+ Create new files with system default permissions, instead of umask 077
+ (only effective with disabled wallet functionality)
+
+ -txexpirynotify=
+ Execute command when transaction expires (%s in cmd is replaced by
+ transaction id)
+
+ -txindex
+ Maintain a full transaction index, used by the getrawtransaction rpc
+ call (default: 0)
+
+Connection options:
+
+ -addnode=
+ Add a node to connect to and attempt to keep the connection open
+
+ -banscore=
+ Threshold for disconnecting misbehaving peers (default: 100)
+
+ -bantime=
+ Number of seconds to keep misbehaving peers from reconnecting (default:
+ 86400)
+
+ -bind=
+ Bind to given address and always listen on it. Use [host]:port notation
+ for IPv6
+
+ -connect=
+ Connect only to the specified node(s); -noconnect or -connect=0 alone to
+ disable automatic connections
+
+ -discover
+ Discover own IP addresses (default: 1 when listening and no -externalip
+ or -proxy)
+
+ -dns
+ Allow DNS lookups for -addnode, -seednode and -connect (default: 1)
+
+ -dnsseed
+ Query for peer addresses via DNS lookup, if low on addresses (default: 1
+ unless -connect/-noconnect)
+
+ -externalip=
+ Specify your own public address
+
+ -forcednsseed
+ Always query for peer addresses via DNS lookup (default: 0)
+
+ -listen
+ Accept connections from outside (default: 1 if no -proxy or
+ -connect/-noconnect)
+
+ -listenonion
+ Automatically create Tor hidden service (default: 1)
+
+ -maxconnections=
+ Maintain at most connections to peers (default: 125)
+
+ -maxreceivebuffer=
+ Maximum per-connection receive buffer, *1000 bytes (default: 5000)
+
+ -maxsendbuffer=
+ Maximum per-connection send buffer, *1000 bytes (default: 1000)
+
+ -mempoolevictionmemoryminutes=
+ The number of minutes before allowing rejected transactions to re-enter
+ the mempool. (default: 60)
+
+ -mempooltxcostlimit=
+ An upper bound on the maximum size in bytes of all transactions in the
+ mempool. (default: 80000000)
+
+ -onion=
+ Use separate SOCKS5 proxy to reach peers via Tor hidden services
+ (default: -proxy)
+
+ -onlynet=
+ Only connect to nodes in network (ipv4, ipv6 or onion)
+
+ -permitbaremultisig
+ Relay non-P2SH multisig (default: 1)
+
+ -peerbloomfilters
+ Support filtering of blocks and transaction with bloom filters (default:
+ 1)
+
+ -port=
+ Listen for connections on (default: 8233 or testnet: 18233)
+
+ -proxy=
+ Connect through SOCKS5 proxy
+
+ -proxyrandomize
+ Randomize credentials for every proxy connection. This enables Tor
+ stream isolation (default: 1)
+
+ -seednode=
+ Connect to a node to retrieve peer addresses, and disconnect
+
+ -timeout=
+ Specify connection timeout in milliseconds (minimum: 1, default: 5000)
+
+ -torcontrol=:
+ Tor control port to use if onion listening enabled (default:
+ 127.0.0.1:9051)
+
+ -torpassword=
+ Tor control port password (default: empty)
+
+ -whitebind=
+ Bind to given address and whitelist peers connecting to it. Use
+ [host]:port notation for IPv6
+
+ -whitelist=
+ Whitelist peers connecting from the given netmask or IP address. Can be
+ specified multiple times. Whitelisted peers cannot be DoS banned and
+ their transactions are always relayed, even if they are already in the
+ mempool, useful e.g. for a gateway
+
+ -whitelistrelay
+ Accept relayed transactions received from whitelisted inbound peers even
+ when not relaying transactions (default: 1)
+
+ -whitelistforcerelay
+ Force relay of transactions from whitelisted inbound peers even they
+ violate local relay policy (default: 1)
+
+ -maxuploadtarget=
+ Tries to keep outbound traffic under the given target (in MiB per 24h),
+ 0 = no limit (default: 0)
+
+Wallet options:
+
+ -disablewallet
+ Do not load the wallet and disable wallet RPC calls
+
+ -keypool=
+ Set key pool size to (default: 100)
+
+ -migration
+ Enable the Sprout to Sapling migration
+
+ -migrationdestaddress=
+ Set the Sapling migration address
+
+ -mintxfee=
+ Fees (in ZEC/kB) smaller than this are considered zero fee for
+ transaction creation (default: 0.00001)
+
+ -orchardactionlimit=
+ Set the maximum number of Orchard actions permitted in a transaction
+ (default 50)
+
+ -paytxfee=
+ Fee (in ZEC/kB) to add to transactions you send (default: 0.00)
+
+ -rescan
+ Rescan the block chain for missing wallet transactions on startup
+
+ -salvagewallet
+ Attempt to recover private keys from a corrupt wallet on startup
+ (implies -rescan)
+
+ -sendfreetransactions
+ Send transactions as zero-fee transactions if possible (default: 0)
+
+ -spendzeroconfchange
+ Spend unconfirmed change when sending transactions (default: 1)
+
+ -txconfirmtarget=
+ If paytxfee is not set, include enough fee so transactions begin
+ confirmation on average within n blocks (default: 2)
+
+ -txexpirydelta
+ Set the number of blocks after which a transaction that has not been
+ mined will become invalid (min: 4, default: 20 (pre-Blossom) or 40
+ (post-Blossom))
+
+ -upgradewallet
+ Upgrade wallet to latest format on startup
+
+ -wallet=
+ Specify wallet file absolute path or a path relative to the data
+ directory (default: wallet.dat)
+
+ -walletbroadcast
+ Make the wallet broadcast transactions (default: 1)
+
+ -walletnotify=
+ Execute command when a wallet transaction changes (%s in cmd is replaced
+ by TxID)
+
+ -zapwallettxes=
+ Delete all wallet transactions and only recover those parts of the
+ blockchain through -rescan on startup (1 = keep tx meta data e.g.
+ account owner and payment request information, 2 = drop tx meta data)
+
+ -walletrequirebackup=
+ By default, the wallet will not allow generation of new spending keys &
+ addresses from the mnemonic seed until the backup of that seed has been
+ confirmed with the `zcashd-wallet-tool` utility. A user may start zcashd
+ with `-walletrequirebackup=false` to allow generation of spending keys
+ even if the backup has not yet been confirmed.
+
+ZeroMQ notification options:
+
+ -zmqpubhashblock=
+ Enable publish hash block in
+
+ -zmqpubhashtx=
+ Enable publish hash transaction in
+
+ -zmqpubrawblock=
+ Enable publish raw block in
+
+ -zmqpubrawtx=
+ Enable publish raw transaction in
+
+Monitoring options:
+
+ -metricsallowip=
+ Allow metrics connections from specified source. Valid for are a
+ single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0)
+ or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified
+ multiple times. (default: only localhost)
+
+ -metricsbind=
+ Bind to given address to listen for metrics connections. (default: bind
+ to all interfaces)
+
+ -prometheusport=
+ Expose node metrics in the Prometheus exposition format. An HTTP
+ listener will be started on , which responds to GET requests on
+ any request path. Use -metricsallowip and -metricsbind to control
+ access.
+
+Debugging/Testing options:
+
+ -debug=
+ Output debugging information (default: 0, supplying is
+ optional). If is not supplied or if = 1, output
+ all debugging information. can be: addrman, alert, bench,
+ coindb, db, estimatefee, http, libevent, lock, mempool, mempoolrej, net,
+ partitioncheck, pow, proxy, prune, rand, receiveunsafe, reindex, rpc,
+ selectcoins, tor, zmq, zrpc, zrpcunsafe (implies zrpc). For multiple
+ specific categories use -debug= multiple times.
+
+ -experimentalfeatures
+ Enable use of experimental features
+
+ -help-debug
+ Show all debugging options (usage: --help -help-debug)
+
+ -logips
+ Include IP addresses in debug output (default: 0)
+
+ -logtimestamps
+ Prepend debug output with timestamp (default: 1)
+
+ -minrelaytxfee=
+ Fees (in ZEC/kB) smaller than this are considered zero fee for relaying,
+ mining and transaction creation (default: 0.000001)
+
+ -maxtxfee=
+ Maximum total fees (in ZEC) to use in a single wallet transaction or raw
+ transaction; setting this too low may abort large transactions (default:
+ 0.10)
+
+ -printtoconsole
+ Send trace/debug info to console instead of debug log
+
+Chain selection options:
+
+ -testnet
+ Use the test chain
+
+Node relay options:
+
+ -datacarrier
+ Relay and mine data carrier transactions (default: 1)
+
+ -datacarriersize
+ Maximum size of data in data carrier transactions we relay and mine
+ (default: 83)
+
+Block creation options:
+
+ -blockminsize=
+ Set minimum block size in bytes (default: 0)
+
+ -blockmaxsize=
+ Set maximum block size in bytes (default: 2000000)
+
+ -blockprioritysize=
+ Set maximum size of high-priority/low-fee transactions in bytes
+ (default: 1000000)
+
+Mining options:
+
+ -gen
+ Generate coins (default: 0)
+
+ -genproclimit=
+ Set the number of threads for coin generation if enabled (-1 = all
+ cores, default: 1)
+
+ -equihashsolver=
+ Specify the Equihash solver to be used if enabled (default: "default")
+
+ -mineraddress=
+ Send mined coins to a specific single address
+
+ -minetolocalwallet
+ Require that mined blocks use a coinbase address in the local wallet
+ (default: 1)
+
+RPC server options:
+
+ -server
+ Accept command line and JSON-RPC commands
+
+ -rest
+ Accept public REST requests (default: 0)
+
+ -rpcbind=
+ Bind to given address to listen for JSON-RPC connections. Use
+ [host]:port notation for IPv6. This option can be specified multiple
+ times (default: bind to all interfaces)
+
+ -rpcuser=
+ Username for JSON-RPC connections
+
+ -rpcpassword=
+ Password for JSON-RPC connections
+
+ -rpcauth=
+ Username and hashed password for JSON-RPC connections. The field
+ comes in the format: :$. A canonical
+ python script is included in share/rpcuser. This option can be specified
+ multiple times
+
+ -rpcport=
+ Listen for JSON-RPC connections on (default: 8232 or testnet:
+ 18232)
+
+ -rpcallowip=
+ Allow JSON-RPC connections from specified source. Valid for are a
+ single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0)
+ or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified
+ multiple times
+
+ -rpcthreads=
+ Set the number of threads to service RPC calls (default: 4)
+
+Metrics Options (only if -daemon and -printtoconsole are not set):
+
+ -showmetrics
+ Show metrics on stdout (default: 1 if running in a console, 0 otherwise)
+
+ -metricsui
+ Set to 1 for a persistent metrics screen, 0 for sequential metrics
+ output (default: 1 if running in a console, 0 otherwise)
+
+ -metricsrefreshtime
+ Number of seconds between metrics refreshes (default: 1 if running in a
+ console, 600 otherwise)
+
+Compatibility options:
+
+ -preferredtxversion
+ Preferentially create transactions having the specified version when
+ possible (default: 4)
+"""
+
+class ShowHelpTest(BitcoinTestFramework):
+
+ def setup_network(self):
+ self.nodes = []
+
+ def show_help(self):
+ with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stdout:
+ args = [ zcashd_binary(), "--help" ]
+ process = subprocess.Popen(args, stdout=log_stdout)
+ while process.poll() is None:
+ time.sleep(0.25)
+ assert_equal(process.returncode, 0)
+ log_stdout.seek(0)
+ stdout = log_stdout.read().decode('utf-8')
+ assert_true(help_message in stdout)
+
+ def run_test(self):
+ self.show_help()
+
+if __name__ == '__main__':
+ ShowHelpTest().main()
diff --git a/qa/rpc-tests/test_framework/util.py b/qa/rpc-tests/test_framework/util.py
index 13b439b10..90b127f4e 100644
--- a/qa/rpc-tests/test_framework/util.py
+++ b/qa/rpc-tests/test_framework/util.py
@@ -406,7 +406,7 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
"""
datadir = os.path.join(dirname, "node"+str(i))
if binary is None:
- binary = os.getenv("ZCASHD", ZCASHD_BINARY)
+ binary = zcashd_binary()
args = [ binary, "-datadir="+datadir, "-keypool=1", "-discover=0", "-rest" ]
args.extend([
'-nuparams=5ba81b19:1', # Overwinter