From f590653377d5ee18c05894a58d226b5d2531077b Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Wed, 19 Jun 2013 11:53:02 -0400 Subject: [PATCH] RPC: add 'verifychain', to verify chain database at runtime --- src/bitcoinrpc.cpp | 3 +++ src/bitcoinrpc.h | 1 + src/main.cpp | 2 +- src/rpcblockchain.cpp | 16 ++++++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 285a88c8d..d939f5f7b 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -258,6 +258,7 @@ static const CRPCCommand vRPCCommands[] = { "gettxout", &gettxout, true, false }, { "lockunspent", &lockunspent, false, false }, { "listlockunspent", &listlockunspent, false, false }, + { "verifychain", &verifychain, true, false }, }; CRPCTable::CRPCTable() @@ -1198,6 +1199,8 @@ Array RPCConvertValues(const std::string &strMethod, const std::vector 0) ConvertTo(params[0]); if (strMethod == "lockunspent" && n > 1) ConvertTo(params[1]); if (strMethod == "importprivkey" && n > 2) ConvertTo(params[2]); + if (strMethod == "verifychain" && n > 0) ConvertTo(params[0]); + if (strMethod == "verifychain" && n > 1) ConvertTo(params[1]); return params; } diff --git a/src/bitcoinrpc.h b/src/bitcoinrpc.h index 44c657f8d..aff759a5c 100644 --- a/src/bitcoinrpc.h +++ b/src/bitcoinrpc.h @@ -205,5 +205,6 @@ extern json_spirit::Value getblockhash(const json_spirit::Array& params, bool fH extern json_spirit::Value getblock(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value gettxoutsetinfo(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value gettxout(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value verifychain(const json_spirit::Array& params, bool fHelp); #endif diff --git a/src/main.cpp b/src/main.cpp index 58c0c9363..4f29f7711 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2622,7 +2622,7 @@ bool VerifyDB(int nCheckLevel, int nCheckDepth) return true; // Verify blocks in the best chain - if (nCheckDepth == 0) + if (nCheckDepth <= 0) nCheckDepth = 1000000000; // suffices until the year 19000 if (nCheckDepth > nBestHeight) nCheckDepth = nBestHeight; diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index a0ddc4d9e..6b2ef8315 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -243,4 +243,20 @@ Value gettxout(const Array& params, bool fHelp) return ret; } +Value verifychain(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 2) + throw runtime_error( + "verifychain [check level] [num blocks]\n" + "Verifies blockchain database."); + + int nCheckLevel = GetArg("-checklevel", 3); + int nCheckDepth = GetArg("-checkblocks", 288); + if (params.size() > 0) + nCheckLevel = params[0].get_int(); + if (params.size() > 1) + nCheckDepth = params[1].get_int(); + + return VerifyDB(nCheckLevel, nCheckDepth); +}