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