From 1b2e555593ed2fade74657355e13fbad2f0b552c Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Fri, 24 Apr 2015 22:12:06 +0200 Subject: [PATCH 1/2] add autoprune information to RPC "getblockchaininfo" --- src/rpcblockchain.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 293d6d561..d8771d1dd 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -492,6 +492,15 @@ Value getblockchaininfo(const Array& params, bool fHelp) obj.push_back(Pair("difficulty", (double)GetDifficulty())); obj.push_back(Pair("verificationprogress", Checkpoints::GuessVerificationProgress(chainActive.Tip()))); obj.push_back(Pair("chainwork", chainActive.Tip()->nChainWork.GetHex())); + obj.push_back(Pair("pruned", fPruneMode)); + if (fPruneMode) + { + CBlockIndex *block = chainActive.Tip(); + while (block && block->pprev && (block->pprev->nStatus & BLOCK_HAVE_DATA)) + block = block->pprev; + + obj.push_back(Pair("pruneheight", block->nHeight)); + } return obj; } From 03c56872b532d111645f83f4cb80c36a3e46d54f Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Mon, 27 Apr 2015 05:18:24 +0200 Subject: [PATCH 2/2] appropriate response when trying to get a block in pruned mode --- src/rest.cpp | 3 +++ src/rpcblockchain.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/rest.cpp b/src/rest.cpp index adc2d5628..69bf5b58a 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -174,6 +174,9 @@ static bool rest_block(AcceptedConnection* conn, throw RESTERR(HTTP_NOT_FOUND, hashStr + " not found"); pblockindex = mapBlockIndex[hash]; + if (fHavePruned && !(pblockindex->nStatus & BLOCK_HAVE_DATA) && pblockindex->nTx > 0) + throw RESTERR(HTTP_NOT_FOUND, hashStr + " not available (pruned data)"); + if (!ReadBlockFromDisk(block, pblockindex)) throw RESTERR(HTTP_NOT_FOUND, hashStr + " not found"); } diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index d8771d1dd..126e20152 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -299,6 +299,9 @@ Value getblock(const Array& params, bool fHelp) CBlock block; CBlockIndex* pblockindex = mapBlockIndex[hash]; + if (fHavePruned && !(pblockindex->nStatus & BLOCK_HAVE_DATA) && pblockindex->nTx > 0) + throw JSONRPCError(RPC_INTERNAL_ERROR, "Block not available (pruned data)"); + if(!ReadBlockFromDisk(block, pblockindex)) throw JSONRPCError(RPC_INTERNAL_ERROR, "Can't read block from disk");