|
|
@ -35,6 +35,8 @@ using namespace boost::algorithm; |
|
|
|
|
|
|
|
|
|
|
|
static const unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC; |
|
|
|
static const unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned int ParseScriptFlags(string strFlags); |
|
|
|
|
|
|
|
|
|
|
|
Array |
|
|
|
Array |
|
|
|
read_json(const std::string& jsondata) |
|
|
|
read_json(const std::string& jsondata) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -54,7 +56,7 @@ BOOST_AUTO_TEST_CASE(script_valid) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Read tests from test/data/script_valid.json
|
|
|
|
// Read tests from test/data/script_valid.json
|
|
|
|
// Format is an array of arrays
|
|
|
|
// Format is an array of arrays
|
|
|
|
// Inner arrays are [ "scriptSig", "scriptPubKey" ]
|
|
|
|
// Inner arrays are [ "scriptSig", "scriptPubKey", "flags" ]
|
|
|
|
// ... where scriptSig and scriptPubKey are stringified
|
|
|
|
// ... where scriptSig and scriptPubKey are stringified
|
|
|
|
// scripts.
|
|
|
|
// scripts.
|
|
|
|
Array tests = read_json(std::string(json_tests::script_valid, json_tests::script_valid + sizeof(json_tests::script_valid))); |
|
|
|
Array tests = read_json(std::string(json_tests::script_valid, json_tests::script_valid + sizeof(json_tests::script_valid))); |
|
|
@ -63,7 +65,7 @@ BOOST_AUTO_TEST_CASE(script_valid) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Array test = tv.get_array(); |
|
|
|
Array test = tv.get_array(); |
|
|
|
string strTest = write_string(tv, false); |
|
|
|
string strTest = write_string(tv, false); |
|
|
|
if (test.size() < 2) // Allow size > 2; extra stuff ignored (useful for comments)
|
|
|
|
if (test.size() < 3) // Allow size > 3; extra stuff ignored (useful for comments)
|
|
|
|
{ |
|
|
|
{ |
|
|
|
BOOST_ERROR("Bad test: " << strTest); |
|
|
|
BOOST_ERROR("Bad test: " << strTest); |
|
|
|
continue; |
|
|
|
continue; |
|
|
@ -72,9 +74,10 @@ BOOST_AUTO_TEST_CASE(script_valid) |
|
|
|
CScript scriptSig = ParseScript(scriptSigString); |
|
|
|
CScript scriptSig = ParseScript(scriptSigString); |
|
|
|
string scriptPubKeyString = test[1].get_str(); |
|
|
|
string scriptPubKeyString = test[1].get_str(); |
|
|
|
CScript scriptPubKey = ParseScript(scriptPubKeyString); |
|
|
|
CScript scriptPubKey = ParseScript(scriptPubKeyString); |
|
|
|
|
|
|
|
unsigned int scriptflags = ParseScriptFlags(test[2].get_str()); |
|
|
|
|
|
|
|
|
|
|
|
CTransaction tx; |
|
|
|
CTransaction tx; |
|
|
|
BOOST_CHECK_MESSAGE(VerifyScript(scriptSig, scriptPubKey, tx, 0, flags, SIGHASH_NONE), strTest); |
|
|
|
BOOST_CHECK_MESSAGE(VerifyScript(scriptSig, scriptPubKey, tx, 0, scriptflags, SIGHASH_NONE), strTest); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -96,9 +99,10 @@ BOOST_AUTO_TEST_CASE(script_invalid) |
|
|
|
CScript scriptSig = ParseScript(scriptSigString); |
|
|
|
CScript scriptSig = ParseScript(scriptSigString); |
|
|
|
string scriptPubKeyString = test[1].get_str(); |
|
|
|
string scriptPubKeyString = test[1].get_str(); |
|
|
|
CScript scriptPubKey = ParseScript(scriptPubKeyString); |
|
|
|
CScript scriptPubKey = ParseScript(scriptPubKeyString); |
|
|
|
|
|
|
|
unsigned int scriptflags = ParseScriptFlags(test[2].get_str()); |
|
|
|
|
|
|
|
|
|
|
|
CTransaction tx; |
|
|
|
CTransaction tx; |
|
|
|
BOOST_CHECK_MESSAGE(!VerifyScript(scriptSig, scriptPubKey, tx, 0, flags, SIGHASH_NONE), strTest); |
|
|
|
BOOST_CHECK_MESSAGE(!VerifyScript(scriptSig, scriptPubKey, tx, 0, scriptflags, SIGHASH_NONE), strTest); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|