From 1825e37075aa7885930cb48c5452ba3e8952b78a Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Wed, 27 Jun 2018 17:54:32 +1000 Subject: [PATCH 1/7] Error on missing amount in signrawtransaction* Signatures using segregated witness commit to the amount being spent, so that value must be passed into signrawtransactionwithkey and signrawtransactionwithwallet. This ensures an error is issued if that doesn't happen, rather than just assuming the value is 0 and producing a signature that is almost certainly invalid. Github-Pull: #13547 Rebased-From: a3b065b51fb333d976108a1fe34b7f663fd67285 --- src/rpc/rawtransaction.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 82399e156..3fbea1ff7 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -820,7 +820,7 @@ UniValue signrawtransaction(const JSONRPCRequest& request) } Coin newcoin; newcoin.out.scriptPubKey = scriptPubKey; - newcoin.out.nValue = 0; + newcoin.out.nValue = MAX_MONEY; if (prevOut.exists("amount")) { newcoin.out.nValue = AmountFromValue(find_value(prevOut, "amount")); } @@ -898,6 +898,11 @@ UniValue signrawtransaction(const JSONRPCRequest& request) UpdateTransaction(mtx, i, sigdata); + // amount must be specified for valid segwit signature + if (amount == MAX_MONEY && !txin.scriptWitness.IsNull()) { + throw JSONRPCError(RPC_TYPE_ERROR, strprintf("Missing amount for %s", coin.out.ToString())); + } + ScriptError serror = SCRIPT_ERR_OK; if (!VerifyScript(txin.scriptSig, prevPubKey, &txin.scriptWitness, STANDARD_SCRIPT_VERIFY_FLAGS, TransactionSignatureChecker(&txConst, i, amount), &serror)) { if (serror == SCRIPT_ERR_INVALID_STACK_OPERATION) { From 212ef1f9547e27295a94eaa9d5ae552d858e2d9f Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Wed, 27 Jun 2018 17:54:42 +1000 Subject: [PATCH 2/7] [tests] Check signrawtransaction* errors on missing prevtx info Github-Pull: #13547 Rebased-From: 685d1d8115f61b15115d80523dd8273f0a816534 --- test/functional/rpc_rawtransaction.py | 51 +++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/test/functional/rpc_rawtransaction.py b/test/functional/rpc_rawtransaction.py index d39d86b31..ce34c64d3 100755 --- a/test/functional/rpc_rawtransaction.py +++ b/test/functional/rpc_rawtransaction.py @@ -94,6 +94,57 @@ class RawTransactionsTest(BitcoinTestFramework): # Test `createrawtransaction` invalid `replaceable` assert_raises_rpc_error(-3, "Expected type bool", self.nodes[0].createrawtransaction, [], {}, 0, 'foo') + for type in ["bech32", "p2sh-segwit", "legacy"]: + addr = self.nodes[0].getnewaddress("", type) + addrinfo = self.nodes[0].validateaddress(addr) + pubkey = addrinfo["scriptPubKey"] + + self.log.info('sendrawtransaction with missing prevtx info (%s)' %(type)) + + # Test `signrawtransaction` invalid `prevtxs` + inputs = [ {'txid' : txid, 'vout' : 3, 'sequence' : 1000}] + outputs = { self.nodes[0].getnewaddress() : 1 } + rawtx = self.nodes[0].createrawtransaction(inputs, outputs) + + prevtx = dict(txid=txid, scriptPubKey=pubkey, vout=3, amount=1) + succ = self.nodes[0].signrawtransaction(rawtx, [prevtx]) + assert succ["complete"] + if type == "legacy": + del prevtx["amount"] + succ = self.nodes[0].signrawtransaction(rawtx, [prevtx]) + assert succ["complete"] + + if type != "legacy": + assert_raises_rpc_error(-3, "Missing amount", self.nodes[0].signrawtransaction, rawtx, [ + { + "txid": txid, + "scriptPubKey": pubkey, + "vout": 3, + } + ]) + + assert_raises_rpc_error(-3, "Missing vout", self.nodes[0].signrawtransaction, rawtx, [ + { + "txid": txid, + "scriptPubKey": pubkey, + "amount": 1, + } + ]) + assert_raises_rpc_error(-3, "Missing txid", self.nodes[0].signrawtransaction, rawtx, [ + { + "scriptPubKey": pubkey, + "vout": 3, + "amount": 1, + } + ]) + assert_raises_rpc_error(-3, "Missing scriptPubKey", self.nodes[0].signrawtransaction, rawtx, [ + { + "txid": txid, + "vout": 3, + "amount": 1 + } + ]) + ######################################### # sendrawtransaction with missing input # ######################################### From 1cdbea7f742fa128062009ea8ca22383bceacd1e Mon Sep 17 00:00:00 2001 From: Thomas Kerin Date: Fri, 13 Jul 2018 12:47:07 +0100 Subject: [PATCH 3/7] bitcoinconsensus: invalid flags should be set to bitcoinconsensus_error type, add test cases covering bitcoinconsensus error codes Github-Pull: #13655 Rebased-From: 417b6c1d2990ffc78c029442e027797d724a101f --- src/script/bitcoinconsensus.cpp | 2 +- src/test/script_tests.cpp | 142 ++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 1 deletion(-) diff --git a/src/script/bitcoinconsensus.cpp b/src/script/bitcoinconsensus.cpp index 7d3587e2c..752176f73 100644 --- a/src/script/bitcoinconsensus.cpp +++ b/src/script/bitcoinconsensus.cpp @@ -81,7 +81,7 @@ static int verify_script(const unsigned char *scriptPubKey, unsigned int scriptP unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err) { if (!verify_flags(flags)) { - return bitcoinconsensus_ERR_INVALID_FLAGS; + return set_error(err, bitcoinconsensus_ERR_INVALID_FLAGS); } try { TxInputStream stream(SER_NETWORK, PROTOCOL_VERSION, txTo, txToLen); diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index c7a497f3a..de90b00ab 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -1479,4 +1479,146 @@ BOOST_AUTO_TEST_CASE(script_can_append_self) BOOST_CHECK(s == d); } + +#if defined(HAVE_CONSENSUS_LIB) + +/* Test simple (successful) usage of bitcoinconsensus_verify_script */ +BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_returns_true) +{ + unsigned int libconsensus_flags = 0; + int nIn = 0; + + CScript scriptPubKey; + CScript scriptSig; + CScriptWitness wit; + + scriptPubKey << OP_1; + CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1); + CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + stream << spendTx; + + bitcoinconsensus_error err; + int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err); + BOOST_CHECK_EQUAL(result, 1); + BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_OK); +} + +/* Test bitcoinconsensus_verify_script returns invalid tx index err*/ +BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_tx_index_err) +{ + unsigned int libconsensus_flags = 0; + int nIn = 3; + + CScript scriptPubKey; + CScript scriptSig; + CScriptWitness wit; + + scriptPubKey << OP_EQUAL; + CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1); + CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + stream << spendTx; + + bitcoinconsensus_error err; + int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err); + BOOST_CHECK_EQUAL(result, 0); + BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_TX_INDEX); +} + +/* Test bitcoinconsensus_verify_script returns tx size mismatch err*/ +BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_tx_size) +{ + unsigned int libconsensus_flags = 0; + int nIn = 0; + + CScript scriptPubKey; + CScript scriptSig; + CScriptWitness wit; + + scriptPubKey << OP_EQUAL; + CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1); + CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + stream << spendTx; + + bitcoinconsensus_error err; + int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size() * 2, nIn, libconsensus_flags, &err); + BOOST_CHECK_EQUAL(result, 0); + BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_TX_SIZE_MISMATCH); +} + +/* Test bitcoinconsensus_verify_script returns invalid tx serialization error */ +BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_tx_serialization) +{ + unsigned int libconsensus_flags = 0; + int nIn = 0; + + CScript scriptPubKey; + CScript scriptSig; + CScriptWitness wit; + + scriptPubKey << OP_EQUAL; + CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1); + CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + stream << 0xffffffff; + + bitcoinconsensus_error err; + int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err); + BOOST_CHECK_EQUAL(result, 0); + BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_TX_DESERIALIZE); +} + +/* Test bitcoinconsensus_verify_script returns amount required error */ +BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_amount_required_err) +{ + unsigned int libconsensus_flags = bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS; + int nIn = 0; + + CScript scriptPubKey; + CScript scriptSig; + CScriptWitness wit; + + scriptPubKey << OP_EQUAL; + CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1); + CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + stream << spendTx; + + bitcoinconsensus_error err; + int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err); + BOOST_CHECK_EQUAL(result, 0); + BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_AMOUNT_REQUIRED); +} + +/* Test bitcoinconsensus_verify_script returns invalid flags err */ +BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_invalid_flags) +{ + unsigned int libconsensus_flags = 1 << 3; + int nIn = 0; + + CScript scriptPubKey; + CScript scriptSig; + CScriptWitness wit; + + scriptPubKey << OP_EQUAL; + CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1); + CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + stream << spendTx; + + bitcoinconsensus_error err; + int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err); + BOOST_CHECK_EQUAL(result, 0); + BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_INVALID_FLAGS); +} + +#endif BOOST_AUTO_TEST_SUITE_END() From 8561515022e331d9b25f3b03705fb43cb3956f5d Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Mon, 30 Jul 2018 16:38:07 +0200 Subject: [PATCH 4/7] doc: Clean out release notes after 0.16.2 Tree-SHA512: fb7208356134322f3515c682ac7349eddb1ff54094abe397c94acb7e931b42265aca6b716eba072f79ebdb4a69ea87a5e40b6c4a48571db5b7b095ead45456ef --- doc/release-notes.md | 68 +++++++------------------------------------- 1 file changed, 11 insertions(+), 57 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index d549748d2..f8b9192ab 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,6 +1,6 @@ -Bitcoin Core version 0.16.2 is now available from: +Bitcoin Core version 0.16.x is now available from: - + This is a new minor version release, with various bugfixes as well as updated translations. @@ -46,71 +46,25 @@ the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not su Bitcoin Core should also work on most other Unix-like systems but is not frequently tested on them. -0.16.2 change log +Notable changes +=============== + +(to be filled in) + +0.16.x change log ------------------ -### Wallet -- #13622 `c04a4a5` Remove mapRequest tracking that just effects Qt display. (TheBlueMatt) -- #12905 `cfc6f74` [rpcwallet] Clamp walletpassphrase value at 100M seconds (sdaftuar) -- #13437 `ed82e71` wallet: Erase wtxOrderd wtx pointer on removeprunedfunds (MarcoFalke) - -### RPC and other APIs -- #13451 `cbd2f70` rpc: expose CBlockIndex::nTx in getblock(header) (instagibbs) -- #13507 `f7401c8` RPC: Fix parameter count check for importpubkey (kristapsk) -- #13452 `6b9dc8c` rpc: have verifytxoutproof check the number of txns in proof structure (instagibbs) -- #12837 `bf1f150` rpc: fix type mistmatch in `listreceivedbyaddress` (joemphilips) -- #12743 `657dfc5` Fix csBestBlock/cvBlockChange waiting in rpc/mining (sipa) - -### GUI -- #12432 `f78e7f6` [qt] send: Clear All also resets coin control options (Sjors) -- #12617 `21dd512` gui: Show messages as text not html (laanwj) -- #12793 `cf6feb7` qt: Avoid reseting on resetguisettigs=0 (MarcoFalke) - -### Build system -- #13544 `9fd3e00` depends: Update Qt download url (fanquake) -- #12573 `88d1a64` Fix compilation when compiler do not support `__builtin_clz*` (532479301) - -### Tests and QA -- #13061 `170b309` Make tests pass after 2020 (bmwiedemann) -- #13192 `79c4fff` [tests] Fixed intermittent failure in `p2p_sendheaders.py` (lmanners) -- #13300 `d9c5630` qa: Initialize lockstack to prevent null pointer deref (MarcoFalke) -- #13545 `e15e3a9` tests: Fix test case `streams_serializedata_xor` Remove Boost dependency. (practicalswift) -- #13304 `cbdabef` qa: Fix `wallet_listreceivedby` race (MarcoFalke) - -### Miscellaneous -- #12887 `2291774` Add newlines to end of log messages (jnewbery) -- #12859 `18b0c69` Bugfix: Include for `std::unique_ptr` (luke-jr) -- #13131 `ce8aa54` Add Windows shutdown handler (ken2812221) -- #13652 `20461fc` rpc: Fix that CWallet::AbandonTransaction would leave the grandchildren, etc. active (Empact) +(to be filled in) Credits ======= Thanks to everyone who directly contributed to this release: -- 532479301 -- Ben Woosley -- Bernhard M. Wiedemann -- Chun Kuan Lee -- Cory Fields -- fanquake -- Gregory Sanders -- joemphilips -- John Newbery -- Kristaps Kaupe -- lmanners -- Luke Dashjr -- MarcoFalke -- Matt Corallo -- Pieter Wuille -- practicalswift -- Sjors Provoost -- Suhas Daftuar -- Wladimir J. van der Laan +(to be filled in) And to those that reported security issues: -- Braydon Fuller -- Himanshu Mehta +(to be filled in) As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). From 11b9dbb439a15ed275cba673fdc743c612ea374f Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 2 Aug 2018 01:16:41 +0300 Subject: [PATCH 5/7] -prune option -help output aligned with code see: .../src/init.cpp#L1063 Github-Pull: #13844 Rebased-From: 312ff01 --- src/init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/init.cpp b/src/init.cpp index 68933b0d3..4de283655 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -375,7 +375,7 @@ std::string HelpMessage(HelpMessageMode mode) #endif strUsage += HelpMessageOpt("-prune=", strprintf(_("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 -txindex and -rescan. " "Warning: Reverting this setting requires re-downloading the entire blockchain. " - "(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB)"), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024)); + "(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >=%u = automatically prune block files to stay under the specified target size in MiB)"), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024)); strUsage += HelpMessageOpt("-reindex-chainstate", _("Rebuild chain state from the currently indexed blocks")); strUsage += HelpMessageOpt("-reindex", _("Rebuild chain state and block index from the blk*.dat files on disk")); #ifndef WIN32 From 1882995138af4420e56d826bcb412cefe3d9780f Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Sun, 26 Aug 2018 16:17:01 -0700 Subject: [PATCH 6/7] Bump Litecoin release notes for 0.16 final release --- doc/release-notes-litecoin.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/release-notes-litecoin.md b/doc/release-notes-litecoin.md index f74cd459f..bc2b45e50 100644 --- a/doc/release-notes-litecoin.md +++ b/doc/release-notes-litecoin.md @@ -124,6 +124,8 @@ weights. - #13300 `d9c5630` qa: Initialize lockstack to prevent null pointer deref (MarcoFalke) - #13545 `e15e3a9` tests: Fix test case `streams_serializedata_xor` Remove Boost dependency. (practicalswift) - #13304 `cbdabef` qa: Fix `wallet_listreceivedby` race (MarcoFalke) +- #13852 `b64f02f` Make signrawtransaction give an error when amount is needed but missing (ajtowns) +- #13797 `6518bcd` bitcoinconsensus: invalid flags should be set to bitcoinconsensus_error type, add test cases covering bitcoinconsensus error codes (Thomas Kerin) ### Miscellaneous - #12518 `a17fecf` Bump leveldb subtree (MarcoFalke) @@ -141,6 +143,7 @@ weights. - #13184 `4087dd0` RPC Docs: `gettxout*`: clarify bestblock and unspent counts (harding) - #13246 `6de7543` Bump to Ubuntu Bionic 18.04 in build-windows.md (ken2812221) - #12556 `e730b82` Fix version typo in getpeerinfo RPC call help (tamasblummer) +- #13852 `9e116a6` [0.16] doc: correct the help output for -prune (hebasto) Credits ======= From 658d0dc7ee5b90dcffc5909d58e8c8f849e4e121 Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Sun, 26 Aug 2018 16:29:29 -0700 Subject: [PATCH 7/7] Litecoin: Bump date in man pages --- doc/man/litecoin-cli.1 | 2 +- doc/man/litecoin-qt.1 | 4 ++-- doc/man/litecoin-tx.1 | 2 +- doc/man/litecoind.1 | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/man/litecoin-cli.1 b/doc/man/litecoin-cli.1 index d1cadeba4..acf03ed9f 100644 --- a/doc/man/litecoin-cli.1 +++ b/doc/man/litecoin-cli.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH LITECOIN-CLI "1" "July 2018" "litecoin-cli v0.16.2.0" "User Commands" +.TH LITECOIN-CLI "1" "August 2018" "litecoin-cli v0.16.2.0" "User Commands" .SH NAME litecoin-cli \- manual page for litecoin-cli v0.16.2.0 .SH DESCRIPTION diff --git a/doc/man/litecoin-qt.1 b/doc/man/litecoin-qt.1 index e0a7049e9..b3b938471 100644 --- a/doc/man/litecoin-qt.1 +++ b/doc/man/litecoin-qt.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH LITECOIN-QT "1" "July 2018" "litecoin-qt v0.16.2.0" "User Commands" +.TH LITECOIN-QT "1" "August 2018" "litecoin-qt v0.16.2.0" "User Commands" .SH NAME litecoin-qt \- manual page for litecoin-qt v0.16.2.0 .SH DESCRIPTION @@ -97,7 +97,7 @@ blocks if a target size in MiB is provided. This mode is incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this setting requires re\-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, ->550 = automatically prune block files to stay under the +>=550 = automatically prune block files to stay under the specified target size in MiB) .HP \fB\-reindex\-chainstate\fR diff --git a/doc/man/litecoin-tx.1 b/doc/man/litecoin-tx.1 index 36b3c7580..f98f4ce05 100644 --- a/doc/man/litecoin-tx.1 +++ b/doc/man/litecoin-tx.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH LITECOIN-TX "1" "July 2018" "litecoin-tx v0.16.2.0" "User Commands" +.TH LITECOIN-TX "1" "August 2018" "litecoin-tx v0.16.2.0" "User Commands" .SH NAME litecoin-tx \- manual page for litecoin-tx v0.16.2.0 .SH DESCRIPTION diff --git a/doc/man/litecoind.1 b/doc/man/litecoind.1 index 52acec38b..e009d4577 100644 --- a/doc/man/litecoind.1 +++ b/doc/man/litecoind.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. -.TH LITECOIND "1" "July 2018" "litecoind v0.16.2.0" "User Commands" +.TH LITECOIND "1" "August 2018" "litecoind v0.16.2.0" "User Commands" .SH NAME litecoind \- manual page for litecoind v0.16.2.0 .SH DESCRIPTION @@ -102,7 +102,7 @@ blocks if a target size in MiB is provided. This mode is incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this setting requires re\-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, ->550 = automatically prune block files to stay under the +>=550 = automatically prune block files to stay under the specified target size in MiB) .HP \fB\-reindex\-chainstate\fR