Changeset View
Changeset View
Standalone View
Standalone View
src/test/script_tests.cpp
Show First 20 Lines • Show All 441 Lines • ▼ Show 20 Lines | tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 | ||||
.PushSig(keys.key2) | .PushSig(keys.key2) | ||||
.Push(keys.pubkey2C) | .Push(keys.pubkey2C) | ||||
.DamagePush(5) | .DamagePush(5) | ||||
.ScriptError(SCRIPT_ERR_EQUALVERIFY)); | .ScriptError(SCRIPT_ERR_EQUALVERIFY)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, | ||||
"P2PK anyonecanpay", 0) | "P2PK anyonecanpay", 0) | ||||
.PushSig(keys.key1, SigHashType().withAnyoneCanPay(true))); | .PushSig(keys.key1, SigHashType().withAnyoneCanPay())); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, | ||||
"P2PK anyonecanpay marked with normal hashtype", 0) | "P2PK anyonecanpay marked with normal hashtype", 0) | ||||
.PushSig(keys.key1, SigHashType().withAnyoneCanPay(true)) | .PushSig(keys.key1, SigHashType().withAnyoneCanPay()) | ||||
.EditPush(70, "81", "01") | .EditPush(70, "81", "01") | ||||
.ScriptError(SCRIPT_ERR_EVAL_FALSE)); | .ScriptError(SCRIPT_ERR_EVAL_FALSE)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG, | ||||
"P2SH(P2PK)", SCRIPT_VERIFY_P2SH, true) | "P2SH(P2PK)", SCRIPT_VERIFY_P2SH, true) | ||||
.PushSig(keys.key0) | .PushSig(keys.key0) | ||||
.PushRedeem()); | .PushRedeem()); | ||||
▲ Show 20 Lines • Show All 553 Lines • ▼ Show 20 Lines | tests.push_back( | ||||
.PushSig(keys.key0) | .PushSig(keys.key0) | ||||
.PushRedeem()); | .PushRedeem()); | ||||
static const Amount TEST_AMOUNT(12345000000000); | static const Amount TEST_AMOUNT(12345000000000); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | ||||
"P2PK FORKID", SCRIPT_ENABLE_SIGHASH_FORKID, false, | "P2PK FORKID", SCRIPT_ENABLE_SIGHASH_FORKID, false, | ||||
TEST_AMOUNT) | TEST_AMOUNT) | ||||
.PushSig(keys.key0, SigHashType().withForkId(true), 32, 32, | .PushSig(keys.key0, SigHashType().withForkId(), 32, 32, | ||||
TEST_AMOUNT)); | TEST_AMOUNT)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | ||||
"P2PK INVALID AMOUNT", SCRIPT_ENABLE_SIGHASH_FORKID, false, | "P2PK INVALID AMOUNT", SCRIPT_ENABLE_SIGHASH_FORKID, false, | ||||
TEST_AMOUNT) | TEST_AMOUNT) | ||||
.PushSig(keys.key0, SigHashType().withForkId(true), 32, 32, | .PushSig(keys.key0, SigHashType().withForkId(), 32, 32, | ||||
TEST_AMOUNT + Amount(1)) | TEST_AMOUNT + Amount(1)) | ||||
.ScriptError(SCRIPT_ERR_EVAL_FALSE)); | .ScriptError(SCRIPT_ERR_EVAL_FALSE)); | ||||
tests.push_back( | tests.push_back( | ||||
TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, | ||||
"P2PK INVALID FORKID", SCRIPT_VERIFY_STRICTENC, false, | "P2PK INVALID FORKID", SCRIPT_VERIFY_STRICTENC, false, | ||||
TEST_AMOUNT) | TEST_AMOUNT) | ||||
.PushSig(keys.key0, SigHashType().withForkId(true), 32, 32, | .PushSig(keys.key0, SigHashType().withForkId(), 32, 32, TEST_AMOUNT) | ||||
TEST_AMOUNT) | |||||
.ScriptError(SCRIPT_ERR_ILLEGAL_FORKID)); | .ScriptError(SCRIPT_ERR_ILLEGAL_FORKID)); | ||||
std::set<std::string> tests_set; | std::set<std::string> tests_set; | ||||
{ | { | ||||
UniValue json_tests = read_json(std::string( | UniValue json_tests = read_json(std::string( | ||||
json_tests::script_tests, | json_tests::script_tests, | ||||
json_tests::script_tests + sizeof(json_tests::script_tests))); | json_tests::script_tests + sizeof(json_tests::script_tests))); | ||||
▲ Show 20 Lines • Show All 400 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(script_combineSigs) { | ||||
std::vector<uint8_t> sig1; | std::vector<uint8_t> sig1; | ||||
uint256 hash1 = SignatureHash(scriptPubKey, CTransaction(txTo), 0, | uint256 hash1 = SignatureHash(scriptPubKey, CTransaction(txTo), 0, | ||||
SigHashType(), Amount(0)); | SigHashType(), Amount(0)); | ||||
BOOST_CHECK(keys[0].Sign(hash1, sig1)); | BOOST_CHECK(keys[0].Sign(hash1, sig1)); | ||||
sig1.push_back(SIGHASH_ALL); | sig1.push_back(SIGHASH_ALL); | ||||
std::vector<uint8_t> sig2; | std::vector<uint8_t> sig2; | ||||
uint256 hash2 = SignatureHash( | uint256 hash2 = SignatureHash( | ||||
scriptPubKey, CTransaction(txTo), 0, | scriptPubKey, CTransaction(txTo), 0, | ||||
SigHashType().withBaseSigHash(BaseSigHashType::NONE), Amount(0)); | SigHashType().withBaseType(BaseSigHashType::NONE), Amount(0)); | ||||
BOOST_CHECK(keys[1].Sign(hash2, sig2)); | BOOST_CHECK(keys[1].Sign(hash2, sig2)); | ||||
sig2.push_back(SIGHASH_NONE); | sig2.push_back(SIGHASH_NONE); | ||||
std::vector<uint8_t> sig3; | std::vector<uint8_t> sig3; | ||||
uint256 hash3 = SignatureHash( | uint256 hash3 = SignatureHash( | ||||
scriptPubKey, CTransaction(txTo), 0, | scriptPubKey, CTransaction(txTo), 0, | ||||
SigHashType().withBaseSigHash(BaseSigHashType::SINGLE), Amount(0)); | SigHashType().withBaseType(BaseSigHashType::SINGLE), Amount(0)); | ||||
BOOST_CHECK(keys[2].Sign(hash3, sig3)); | BOOST_CHECK(keys[2].Sign(hash3, sig3)); | ||||
sig3.push_back(SIGHASH_SINGLE); | sig3.push_back(SIGHASH_SINGLE); | ||||
// Not fussy about order (or even existence) of placeholders or signatures: | // Not fussy about order (or even existence) of placeholders or signatures: | ||||
CScript partial1a = CScript() << OP_0 << sig1 << OP_0; | CScript partial1a = CScript() << OP_0 << sig1 << OP_0; | ||||
CScript partial1b = CScript() << OP_0 << OP_0 << sig1; | CScript partial1b = CScript() << OP_0 << OP_0 << sig1; | ||||
CScript partial2a = CScript() << OP_0 << sig2; | CScript partial2a = CScript() << OP_0 << sig2; | ||||
CScript partial2b = CScript() << sig2 << OP_0; | CScript partial2b = CScript() << sig2 << OP_0; | ||||
▲ Show 20 Lines • Show All 325 Lines • Show Last 20 Lines |