Changeset View
Changeset View
Standalone View
Standalone View
src/test/sigcheckcount_tests.cpp
| Show First 20 Lines • Show All 302 Lines • ▼ Show 20 Lines | // (this is a simplified form) | ||||
| script << bigblob << bigblob << OP_2DROP; | script << bigblob << bigblob << OP_2DROP; | ||||
| } | } | ||||
| script << 1; | script << 1; | ||||
| BOOST_CHECK_EQUAL(script.size(), 9666); | BOOST_CHECK_EQUAL(script.size(), 9666); | ||||
| CheckEvalScript(stack, script, {vtrue}, 94); | CheckEvalScript(stack, script, {vtrue}, 94); | ||||
| } | } | ||||
| } | } | ||||
| BOOST_AUTO_TEST_CASE(test_verifyscript) { | |||||
| // make sure that verifyscript is correctly resetting and accumulating | |||||
| // sigchecks for the input. | |||||
| ScriptExecutionMetrics metrics; | |||||
| // regardless of the initial value, it gets zeroed out | |||||
| metrics.nSigChecks = 12345; | |||||
| BOOST_CHECK(VerifyScript(CScript() << OP_1, CScript(), 0, dummysigchecker, | |||||
| metrics)); | |||||
| BOOST_CHECK_EQUAL(metrics.nSigChecks, 0); | |||||
| // it even gets zeroed out for segwit recovery special case (which returns | |||||
| // true from an alternative location) | |||||
| metrics.nSigChecks = 12345; | |||||
| CScript swscript; | |||||
| swscript << OP_0 << std::vector<uint8_t>(20); | |||||
| BOOST_CHECK(VerifyScript(CScript() << ToByteVector(swscript), | |||||
| CScript() << OP_HASH160 | |||||
| << ToByteVector(CScriptID(swscript)) | |||||
| << OP_EQUAL, | |||||
| SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_CLEANSTACK, | |||||
| dummysigchecker, metrics)); | |||||
| BOOST_CHECK_EQUAL(metrics.nSigChecks, 0); | |||||
| // If signature checks somehow occur in scriptsig, they do get counted. | |||||
| // This can happen in historical blocks pre SIGPUSHONLY, even with CHECKSIG. | |||||
| // (an analogous check for P2SH is not possible since it enforces | |||||
| // sigpushonly). | |||||
| BOOST_CHECK(VerifyScript(CScript() << sigschnorr << msg << pub | |||||
| << OP_CHECKDATASIG /* scriptSig */, | |||||
| CScript() << sigecdsa << msg << pub | |||||
| << OP_CHECKDATASIG /* scriptPubKey */, | |||||
| 0, dummysigchecker, metrics)); | |||||
| BOOST_CHECK_EQUAL(metrics.nSigChecks, 2); | |||||
| } | |||||
| BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() | ||||