diff -uNr a/bitcoin/src/init.cpp b/bitcoin/src/init.cpp --- a/bitcoin/src/init.cpp 7a171c2f30805f207ae170404f2f684144c254a13f4f25581146611c38313b2bb1b3cd6347c0ce9b66c313e0004eac66b04e83b431ec78910f5aabb0de341043 +++ b/bitcoin/src/init.cpp ff7009f672bf400a42d1d7afb6e58aaf1c29d9c219fad51c5f17000243a485e92bbb250d3f4bbec3f0717d00fad620c294d537832671f20c0979fb3f1383779b @@ -174,6 +174,7 @@ " -daemon \t\t " + _("Run in the background as a daemon and accept commands\n") + " -debug \t\t " + _("Output extra debugging information\n") + " -caneat \t\t " + _("Permit the use of 'eatblock'\n") + + " -verifyall \t\t " + _("Forbid the skipping of ECDSA signature verification between checkpoints.\n") + " -logtimestamps \t " + _("Prepend debug output with timestamp\n") + " -printtoconsole \t " + _("Send trace/debug info to console instead of debug.log file\n") + " -rpcuser= \t " + _("Username for JSON-RPC connections\n") + @@ -196,6 +197,7 @@ fDebug = GetBoolArg("-debug"); fDaemon = GetBoolArg("-daemon"); fCanEat = GetBoolArg("-caneat"); + fVerifyAll = GetBoolArg("-verifyall"); if (fDaemon) fServer = true; diff -uNr a/bitcoin/src/main.cpp b/bitcoin/src/main.cpp --- a/bitcoin/src/main.cpp f55521ae4e41e386b5a5b839c778b27317eb67b98d8fc502adbf46f8d2e68236d03d48c9509de6b90ef64ecb976cbab4bc24bfd114962c75db927d369c9122d6 +++ b/bitcoin/src/main.cpp 92038390413f77b55e19439738e87c21bd5b2313dc6edad78bcc8bf722dde82623a31a56a87b0182e75e6824fc709dc216fb9cb159b49a16e212e3a5ded93f58 @@ -832,7 +832,7 @@ // Skip ECDSA signature verification when connecting blocks (fBlock=true) // before the last blockchain checkpoint. This is safe because block merkle hashes are // still computed and checked, and any change will be caught at the next checkpoint. - if (!(fBlock && (nBestHeight < Checkpoints::GetTotalBlocksEstimate()))) + if (fVerifyAll || (!(fBlock && (nBestHeight < Checkpoints::GetTotalBlocksEstimate())))) // Verify signature if (!VerifySignature(txPrev, *this, i)) return DoS(100,error("ConnectInputs() : %s VerifySignature failed", GetHash().ToString().substr(0,10).c_str())); diff -uNr a/bitcoin/src/util.cpp b/bitcoin/src/util.cpp --- a/bitcoin/src/util.cpp e2cc1d21c90f28e0475d0801c80c81adddecf1464925c0cde2a5b004e3e26d6917d7224453fb814f62f85d566f377518501fb7e825f173c901da590491fad9c5 +++ b/bitcoin/src/util.cpp 3dcfe5f29728dcd34a6dfe23e9cd17e5f4a332a8d2e7444355106c8c63436cf54892424df2018756c2e109463fd87728fc668a5a03914a4aa3f30bb90403b433 @@ -21,6 +21,7 @@ bool fPrintToConsole = false; bool fPrintToDebugger = false; bool fCanEat = false; +bool fVerifyAll = false; char pszSetDataDir[MAX_PATH] = ""; bool fRequestShutdown = false; bool fShutdown = false; diff -uNr a/bitcoin/src/util.h b/bitcoin/src/util.h --- a/bitcoin/src/util.h d88425cb5b70d7df2a60d174f99347b3ac00f0a7f17227bd9944f22ffaa3772389989c00c14135fbbb121fe3cb5b68c51eb1120ce214d3732b354c580d1f2fec +++ b/bitcoin/src/util.h 44bd62e864ed9400105aeea2e2ef6499f971577fd28b9c8dc52ef72dcdb4d4928168037cd7d7fca718e5d5a2d4d7c19c65f5b45c87d814d6e24c0d014b307477 @@ -111,6 +111,7 @@ extern bool fPrintToConsole; extern bool fPrintToDebugger; extern bool fCanEat; +extern bool fVerifyAll; extern char pszSetDataDir[MAX_PATH]; extern bool fRequestShutdown; extern bool fShutdown;