Changeset View
Changeset View
Standalone View
Standalone View
src/test/script_p2sh_tests.cpp
Show First 20 Lines • Show All 325 Lines • ▼ Show 20 Lines | for (int i = 0; i < 6; i++) { | ||||
key[i].MakeNewKey(true); | key[i].MakeNewKey(true); | ||||
keystore.AddKey(key[i]); | keystore.AddKey(key[i]); | ||||
} | } | ||||
for (int i = 0; i < 3; i++) { | for (int i = 0; i < 3; i++) { | ||||
keys.push_back(key[i].GetPubKey()); | keys.push_back(key[i].GetPubKey()); | ||||
} | } | ||||
CMutableTransaction txFrom; | CMutableTransaction txFrom; | ||||
txFrom.vout.resize(7); | txFrom.vout.resize(4); | ||||
// First three are standard: | // First three are standard: | ||||
CScript pay1 = GetScriptForDestination(key[0].GetPubKey().GetID()); | CScript pay1 = GetScriptForDestination(key[0].GetPubKey().GetID()); | ||||
keystore.AddCScript(pay1); | keystore.AddCScript(pay1); | ||||
CScript pay1of3 = GetScriptForMultisig(1, keys); | CScript pay1of3 = GetScriptForMultisig(1, keys); | ||||
// P2SH (OP_CHECKSIG) | // P2SH (OP_CHECKSIG) | ||||
txFrom.vout[0].scriptPubKey = GetScriptForDestination(CScriptID(pay1)); | txFrom.vout[0].scriptPubKey = GetScriptForDestination(CScriptID(pay1)); | ||||
Show All 15 Lines | BOOST_AUTO_TEST_CASE(AreInputsStandard) { | ||||
oneAndTwo << OP_2 << ToByteVector(key[3].GetPubKey()) | oneAndTwo << OP_2 << ToByteVector(key[3].GetPubKey()) | ||||
<< ToByteVector(key[4].GetPubKey()) | << ToByteVector(key[4].GetPubKey()) | ||||
<< ToByteVector(key[5].GetPubKey()); | << ToByteVector(key[5].GetPubKey()); | ||||
oneAndTwo << OP_3 << OP_CHECKMULTISIG; | oneAndTwo << OP_3 << OP_CHECKMULTISIG; | ||||
keystore.AddCScript(oneAndTwo); | keystore.AddCScript(oneAndTwo); | ||||
txFrom.vout[3].scriptPubKey = GetScriptForDestination(CScriptID(oneAndTwo)); | txFrom.vout[3].scriptPubKey = GetScriptForDestination(CScriptID(oneAndTwo)); | ||||
txFrom.vout[3].nValue = 4000 * SATOSHI; | txFrom.vout[3].nValue = 4000 * SATOSHI; | ||||
// vout[4] is max sigops: | |||||
CScript fifteenSigops; | |||||
fifteenSigops << OP_1; | |||||
for (unsigned i = 0; i < MAX_P2SH_SIGOPS; i++) { | |||||
fifteenSigops << ToByteVector(key[i % 3].GetPubKey()); | |||||
} | |||||
fifteenSigops << OP_15 << OP_CHECKMULTISIG; | |||||
keystore.AddCScript(fifteenSigops); | |||||
txFrom.vout[4].scriptPubKey = | |||||
GetScriptForDestination(CScriptID(fifteenSigops)); | |||||
txFrom.vout[4].nValue = 5000 * SATOSHI; | |||||
// vout[5/6] are non-standard because they exceed MAX_P2SH_SIGOPS | |||||
CScript sixteenSigops; | |||||
sixteenSigops << OP_16 << OP_CHECKMULTISIG; | |||||
keystore.AddCScript(sixteenSigops); | |||||
txFrom.vout[5].scriptPubKey = | |||||
GetScriptForDestination(CScriptID(sixteenSigops)); | |||||
txFrom.vout[5].nValue = 5000 * SATOSHI; | |||||
CScript twentySigops; | |||||
twentySigops << OP_CHECKMULTISIG; | |||||
keystore.AddCScript(twentySigops); | |||||
txFrom.vout[6].scriptPubKey = | |||||
GetScriptForDestination(CScriptID(twentySigops)); | |||||
txFrom.vout[6].nValue = 6000 * SATOSHI; | |||||
AddCoins(coins, CTransaction(txFrom), 0); | AddCoins(coins, CTransaction(txFrom), 0); | ||||
CMutableTransaction txTo; | CMutableTransaction txTo; | ||||
txTo.vout.resize(1); | txTo.vout.resize(1); | ||||
txTo.vout[0].scriptPubKey = | txTo.vout[0].scriptPubKey = | ||||
GetScriptForDestination(key[1].GetPubKey().GetID()); | GetScriptForDestination(key[1].GetPubKey().GetID()); | ||||
txTo.vin.resize(5); | txTo.vin.resize(5); | ||||
Show All 13 Lines |