Changeset View
Changeset View
Standalone View
Standalone View
src/test/multisig_tests.cpp
Show All 32 Lines | for (const CKey &key : keys) { | ||||
BOOST_CHECK(key.Sign(hash, vchSig)); | BOOST_CHECK(key.Sign(hash, vchSig)); | ||||
vchSig.push_back(uint8_t(SIGHASH_ALL)); | vchSig.push_back(uint8_t(SIGHASH_ALL)); | ||||
result << vchSig; | result << vchSig; | ||||
} | } | ||||
return result; | return result; | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(multisig_verify) { | BOOST_AUTO_TEST_CASE(multisig_verify) { | ||||
unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC; | uint32_t flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC; | ||||
ScriptError err; | ScriptError err; | ||||
CKey key[4]; | CKey key[4]; | ||||
Amount amount(0); | Amount amount(0); | ||||
for (int i = 0; i < 4; i++) | for (int i = 0; i < 4; i++) { | ||||
key[i].MakeNewKey(true); | key[i].MakeNewKey(true); | ||||
} | |||||
CScript a_and_b; | CScript a_and_b; | ||||
a_and_b << OP_2 << ToByteVector(key[0].GetPubKey()) | a_and_b << OP_2 << ToByteVector(key[0].GetPubKey()) | ||||
<< ToByteVector(key[1].GetPubKey()) << OP_2 << OP_CHECKMULTISIG; | << ToByteVector(key[1].GetPubKey()) << OP_2 << OP_CHECKMULTISIG; | ||||
CScript a_or_b; | CScript a_or_b; | ||||
a_or_b << OP_1 << ToByteVector(key[0].GetPubKey()) | a_or_b << OP_1 << ToByteVector(key[0].GetPubKey()) | ||||
<< ToByteVector(key[1].GetPubKey()) << OP_2 << OP_CHECKMULTISIG; | << ToByteVector(key[1].GetPubKey()) << OP_2 << OP_CHECKMULTISIG; | ||||
Show All 10 Lines | BOOST_AUTO_TEST_CASE(multisig_verify) { | ||||
txFrom.vout[1].scriptPubKey = a_or_b; | txFrom.vout[1].scriptPubKey = a_or_b; | ||||
txFrom.vout[2].scriptPubKey = escrow; | txFrom.vout[2].scriptPubKey = escrow; | ||||
// Spending transaction | // Spending transaction | ||||
CMutableTransaction txTo[3]; | CMutableTransaction txTo[3]; | ||||
for (int i = 0; i < 3; i++) { | for (int i = 0; i < 3; i++) { | ||||
txTo[i].vin.resize(1); | txTo[i].vin.resize(1); | ||||
txTo[i].vout.resize(1); | txTo[i].vout.resize(1); | ||||
txTo[i].vin[0].prevout.n = i; | txTo[i].vin[0].prevout = COutPoint(txFrom.GetId(), i); | ||||
txTo[i].vin[0].prevout.hash = txFrom.GetId(); | |||||
txTo[i].vout[0].nValue = Amount(1); | txTo[i].vout[0].nValue = Amount(1); | ||||
} | } | ||||
std::vector<CKey> keys; | std::vector<CKey> keys; | ||||
CScript s; | CScript s; | ||||
// Test a AND b: | // Test a AND b: | ||||
keys.assign(1, key[0]); | keys.assign(1, key[0]); | ||||
▲ Show 20 Lines • Show All 256 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(multisig_Sign) { | ||||
txFrom.vout[1].scriptPubKey = a_or_b; | txFrom.vout[1].scriptPubKey = a_or_b; | ||||
txFrom.vout[2].scriptPubKey = escrow; | txFrom.vout[2].scriptPubKey = escrow; | ||||
// Spending transaction | // Spending transaction | ||||
CMutableTransaction txTo[3]; | CMutableTransaction txTo[3]; | ||||
for (int i = 0; i < 3; i++) { | for (int i = 0; i < 3; i++) { | ||||
txTo[i].vin.resize(1); | txTo[i].vin.resize(1); | ||||
txTo[i].vout.resize(1); | txTo[i].vout.resize(1); | ||||
txTo[i].vin[0].prevout.n = i; | txTo[i].vin[0].prevout = COutPoint(txFrom.GetId(), i); | ||||
txTo[i].vin[0].prevout.hash = txFrom.GetId(); | |||||
txTo[i].vout[0].nValue = Amount(1); | txTo[i].vout[0].nValue = Amount(1); | ||||
} | } | ||||
for (int i = 0; i < 3; i++) { | for (int i = 0; i < 3; i++) { | ||||
BOOST_CHECK_MESSAGE(SignSignature(keystore, CTransaction(txFrom), | BOOST_CHECK_MESSAGE(SignSignature(keystore, CTransaction(txFrom), | ||||
txTo[i], 0, | txTo[i], 0, | ||||
SigHashType().withForkId()), | SigHashType().withForkId()), | ||||
strprintf("SignSignature %d", i)); | strprintf("SignSignature %d", i)); | ||||
} | } | ||||
} | } | ||||
BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() |