diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 1019c0de241437..a6f6682c450afc 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -799,16 +799,16 @@ std::optional GetPruneHeight(const BlockManager& blockman, const CChain& ch if (!first_block || !chain_tip) return std::nullopt; // If the chain tip is pruned, everything is pruned. - if (!((chain_tip->nStatus & BLOCK_HAVE_MASK) == BLOCK_HAVE_MASK)) return chain_tip->nHeight; + if ((chain_tip->nStatus & BLOCK_HAVE_MASK) != BLOCK_HAVE_MASK) return chain_tip->nHeight; - const auto& first_unpruned{*Assert(blockman.GetFirstBlock(*chain_tip, /*status_mask=*/BLOCK_HAVE_MASK, first_block))}; - if (&first_unpruned == first_block) { + const CBlockIndex* first_unpruned{Assert(blockman.GetFirstBlock(*chain_tip, /*status_mask=*/BLOCK_HAVE_MASK, first_block))}; + if (first_unpruned == first_block) { // All blocks between first_block and chain_tip have data, so nothing is pruned. return std::nullopt; } // Block before the first unpruned block is the last pruned block. - return Assert(first_unpruned.pprev)->nHeight; + return Assert(first_unpruned->pprev)->nHeight; } static RPCHelpMan pruneblockchain() @@ -1285,7 +1285,7 @@ RPCHelpMan getblockchaininfo() {RPCResult::Type::STR_HEX, "chainwork", "total amount of work in active chain, in hexadecimal"}, {RPCResult::Type::NUM, "size_on_disk", "the estimated size of the block and undo files on disk"}, {RPCResult::Type::BOOL, "pruned", "if the blocks are subject to pruning"}, - {RPCResult::Type::NUM, "pruneheight", /*optional=*/true, "height of the last block pruned, plus one (only present if pruning is enabled)"}, + {RPCResult::Type::NUM, "pruneheight", /*optional=*/true, "the first block unpruned, all previous blocks were pruned (only present if pruning is enabled)"}, {RPCResult::Type::BOOL, "automatic_pruning", /*optional=*/true, "whether automatic pruning is enabled (only present if pruning is enabled)"}, {RPCResult::Type::NUM, "prune_target_size", /*optional=*/true, "the target size used by pruning (only present if automatic pruning is enabled)"}, (IsDeprecatedRPCEnabled("warnings") ? diff --git a/src/rpc/blockchain.h b/src/rpc/blockchain.h index f6a7fe236c9065..23909c334ebbd0 100644 --- a/src/rpc/blockchain.h +++ b/src/rpc/blockchain.h @@ -9,15 +9,18 @@ #include #include #include +#include #include #include #include +#include #include #include class CBlock; class CBlockIndex; +class CChain; class Chainstate; class UniValue; namespace node { diff --git a/src/test/blockchain_tests.cpp b/src/test/blockchain_tests.cpp index bc509d73acc2f5..5a93f29370326f 100644 --- a/src/test/blockchain_tests.cpp +++ b/src/test/blockchain_tests.cpp @@ -80,7 +80,7 @@ BOOST_AUTO_TEST_CASE(get_difficulty_for_very_high_target) //! Prune chain from height down to genesis block and check that //! GetPruneHeight returns the correct value -static void CheckGetPruneHeight(node::BlockManager& blockman, CChain& chain, int height) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) +static void CheckGetPruneHeight(const node::BlockManager& blockman, const CChain& chain, int height) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { AssertLockHeld(::cs_main); @@ -98,8 +98,8 @@ static void CheckGetPruneHeight(node::BlockManager& blockman, CChain& chain, int BOOST_FIXTURE_TEST_CASE(get_prune_height, TestChain100Setup) { LOCK(::cs_main); - auto& chain = m_node.chainman->ActiveChain(); - auto& blockman = m_node.chainman->m_blockman; + const auto& chain = m_node.chainman->ActiveChain(); + const auto& blockman = m_node.chainman->m_blockman; // Fresh chain of 100 blocks without any pruned blocks, so std::nullopt should be returned BOOST_CHECK(!GetPruneHeight(blockman, chain).has_value());