|
|
|
@ -68,14 +68,14 @@ BOOST_AUTO_TEST_CASE(sign)
@@ -68,14 +68,14 @@ BOOST_AUTO_TEST_CASE(sign)
|
|
|
|
|
// different keys, straight/P2SH, pubkey/pubkeyhash
|
|
|
|
|
CScript standardScripts[4]; |
|
|
|
|
standardScripts[0] << key[0].GetPubKey() << OP_CHECKSIG; |
|
|
|
|
standardScripts[1].SetDestination(key[1].GetPubKey().GetID()); |
|
|
|
|
standardScripts[1] = GetScriptForDestination(key[1].GetPubKey().GetID()); |
|
|
|
|
standardScripts[2] << key[1].GetPubKey() << OP_CHECKSIG; |
|
|
|
|
standardScripts[3].SetDestination(key[2].GetPubKey().GetID()); |
|
|
|
|
standardScripts[3] = GetScriptForDestination(key[2].GetPubKey().GetID()); |
|
|
|
|
CScript evalScripts[4]; |
|
|
|
|
for (int i = 0; i < 4; i++) |
|
|
|
|
{ |
|
|
|
|
keystore.AddCScript(standardScripts[i]); |
|
|
|
|
evalScripts[i].SetDestination(standardScripts[i].GetID()); |
|
|
|
|
evalScripts[i] = GetScriptForDestination(standardScripts[i].GetID()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CMutableTransaction txFrom; // Funding transaction:
|
|
|
|
@ -129,8 +129,7 @@ BOOST_AUTO_TEST_CASE(norecurse)
@@ -129,8 +129,7 @@ BOOST_AUTO_TEST_CASE(norecurse)
|
|
|
|
|
CScript invalidAsScript; |
|
|
|
|
invalidAsScript << OP_INVALIDOPCODE << OP_INVALIDOPCODE; |
|
|
|
|
|
|
|
|
|
CScript p2sh; |
|
|
|
|
p2sh.SetDestination(invalidAsScript.GetID()); |
|
|
|
|
CScript p2sh = GetScriptForDestination(invalidAsScript.GetID()); |
|
|
|
|
|
|
|
|
|
CScript scriptSig; |
|
|
|
|
scriptSig << Serialize(invalidAsScript); |
|
|
|
@ -140,8 +139,7 @@ BOOST_AUTO_TEST_CASE(norecurse)
@@ -140,8 +139,7 @@ BOOST_AUTO_TEST_CASE(norecurse)
|
|
|
|
|
|
|
|
|
|
// Try to recur, and verification should succeed because
|
|
|
|
|
// the inner HASH160 <> EQUAL should only check the hash:
|
|
|
|
|
CScript p2sh2; |
|
|
|
|
p2sh2.SetDestination(p2sh.GetID()); |
|
|
|
|
CScript p2sh2 = GetScriptForDestination(p2sh.GetID()); |
|
|
|
|
CScript scriptSig2; |
|
|
|
|
scriptSig2 << Serialize(invalidAsScript) << Serialize(p2sh); |
|
|
|
|
|
|
|
|
@ -163,15 +161,15 @@ BOOST_AUTO_TEST_CASE(set)
@@ -163,15 +161,15 @@ BOOST_AUTO_TEST_CASE(set)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CScript inner[4]; |
|
|
|
|
inner[0].SetDestination(key[0].GetPubKey().GetID()); |
|
|
|
|
inner[1].SetMultisig(2, std::vector<CPubKey>(keys.begin(), keys.begin()+2)); |
|
|
|
|
inner[2].SetMultisig(1, std::vector<CPubKey>(keys.begin(), keys.begin()+2)); |
|
|
|
|
inner[3].SetMultisig(2, std::vector<CPubKey>(keys.begin(), keys.begin()+3)); |
|
|
|
|
inner[0] = GetScriptForDestination(key[0].GetPubKey().GetID()); |
|
|
|
|
inner[1] = GetScriptForMultisig(2, std::vector<CPubKey>(keys.begin(), keys.begin()+2)); |
|
|
|
|
inner[2] = GetScriptForMultisig(1, std::vector<CPubKey>(keys.begin(), keys.begin()+2)); |
|
|
|
|
inner[3] = GetScriptForMultisig(2, std::vector<CPubKey>(keys.begin(), keys.begin()+3)); |
|
|
|
|
|
|
|
|
|
CScript outer[4]; |
|
|
|
|
for (int i = 0; i < 4; i++) |
|
|
|
|
{ |
|
|
|
|
outer[i].SetDestination(inner[i].GetID()); |
|
|
|
|
outer[i] = GetScriptForDestination(inner[i].GetID()); |
|
|
|
|
keystore.AddCScript(inner[i]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -244,8 +242,7 @@ BOOST_AUTO_TEST_CASE(switchover)
@@ -244,8 +242,7 @@ BOOST_AUTO_TEST_CASE(switchover)
|
|
|
|
|
CScript scriptSig; |
|
|
|
|
scriptSig << Serialize(notValid); |
|
|
|
|
|
|
|
|
|
CScript fund; |
|
|
|
|
fund.SetDestination(notValid.GetID()); |
|
|
|
|
CScript fund = GetScriptForDestination(notValid.GetID()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Validation should succeed under old rules (hash is correct):
|
|
|
|
@ -274,11 +271,11 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
@@ -274,11 +271,11 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
|
|
|
|
|
txFrom.vout.resize(7); |
|
|
|
|
|
|
|
|
|
// First three are standard:
|
|
|
|
|
CScript pay1; pay1.SetDestination(key[0].GetPubKey().GetID()); |
|
|
|
|
CScript pay1 = GetScriptForDestination(key[0].GetPubKey().GetID()); |
|
|
|
|
keystore.AddCScript(pay1); |
|
|
|
|
CScript pay1of3; pay1of3.SetMultisig(1, keys); |
|
|
|
|
CScript pay1of3 = GetScriptForMultisig(1, keys); |
|
|
|
|
|
|
|
|
|
txFrom.vout[0].scriptPubKey.SetDestination(pay1.GetID()); // P2SH (OP_CHECKSIG)
|
|
|
|
|
txFrom.vout[0].scriptPubKey = GetScriptForDestination(pay1.GetID()); // P2SH (OP_CHECKSIG)
|
|
|
|
|
txFrom.vout[0].nValue = 1000; |
|
|
|
|
txFrom.vout[1].scriptPubKey = pay1; // ordinary OP_CHECKSIG
|
|
|
|
|
txFrom.vout[1].nValue = 2000; |
|
|
|
@ -293,7 +290,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
@@ -293,7 +290,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
|
|
|
|
|
oneAndTwo << OP_2 << key[3].GetPubKey() << key[4].GetPubKey() << key[5].GetPubKey(); |
|
|
|
|
oneAndTwo << OP_3 << OP_CHECKMULTISIG; |
|
|
|
|
keystore.AddCScript(oneAndTwo); |
|
|
|
|
txFrom.vout[3].scriptPubKey.SetDestination(oneAndTwo.GetID()); |
|
|
|
|
txFrom.vout[3].scriptPubKey = GetScriptForDestination(oneAndTwo.GetID()); |
|
|
|
|
txFrom.vout[3].nValue = 4000; |
|
|
|
|
|
|
|
|
|
// vout[4] is max sigops:
|
|
|
|
@ -302,17 +299,17 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
@@ -302,17 +299,17 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
|
|
|
|
|
fifteenSigops << key[i%3].GetPubKey(); |
|
|
|
|
fifteenSigops << OP_15 << OP_CHECKMULTISIG; |
|
|
|
|
keystore.AddCScript(fifteenSigops); |
|
|
|
|
txFrom.vout[4].scriptPubKey.SetDestination(fifteenSigops.GetID()); |
|
|
|
|
txFrom.vout[4].scriptPubKey = GetScriptForDestination(fifteenSigops.GetID()); |
|
|
|
|
txFrom.vout[4].nValue = 5000; |
|
|
|
|
|
|
|
|
|
// 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.SetDestination(fifteenSigops.GetID()); |
|
|
|
|
txFrom.vout[5].scriptPubKey = GetScriptForDestination(fifteenSigops.GetID()); |
|
|
|
|
txFrom.vout[5].nValue = 5000; |
|
|
|
|
CScript twentySigops; twentySigops << OP_CHECKMULTISIG; |
|
|
|
|
keystore.AddCScript(twentySigops); |
|
|
|
|
txFrom.vout[6].scriptPubKey.SetDestination(twentySigops.GetID()); |
|
|
|
|
txFrom.vout[6].scriptPubKey = GetScriptForDestination(twentySigops.GetID()); |
|
|
|
|
txFrom.vout[6].nValue = 6000; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -320,7 +317,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
@@ -320,7 +317,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
|
|
|
|
|
|
|
|
|
|
CMutableTransaction txTo; |
|
|
|
|
txTo.vout.resize(1); |
|
|
|
|
txTo.vout[0].scriptPubKey.SetDestination(key[1].GetPubKey().GetID()); |
|
|
|
|
txTo.vout[0].scriptPubKey = GetScriptForDestination(key[1].GetPubKey().GetID()); |
|
|
|
|
|
|
|
|
|
txTo.vin.resize(5); |
|
|
|
|
for (int i = 0; i < 5; i++) |
|
|
|
@ -352,7 +349,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
@@ -352,7 +349,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
|
|
|
|
|
|
|
|
|
|
CMutableTransaction txToNonStd1; |
|
|
|
|
txToNonStd1.vout.resize(1); |
|
|
|
|
txToNonStd1.vout[0].scriptPubKey.SetDestination(key[1].GetPubKey().GetID()); |
|
|
|
|
txToNonStd1.vout[0].scriptPubKey = GetScriptForDestination(key[1].GetPubKey().GetID()); |
|
|
|
|
txToNonStd1.vout[0].nValue = 1000; |
|
|
|
|
txToNonStd1.vin.resize(1); |
|
|
|
|
txToNonStd1.vin[0].prevout.n = 5; |
|
|
|
@ -364,7 +361,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
@@ -364,7 +361,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard)
|
|
|
|
|
|
|
|
|
|
CMutableTransaction txToNonStd2; |
|
|
|
|
txToNonStd2.vout.resize(1); |
|
|
|
|
txToNonStd2.vout[0].scriptPubKey.SetDestination(key[1].GetPubKey().GetID()); |
|
|
|
|
txToNonStd2.vout[0].scriptPubKey = GetScriptForDestination(key[1].GetPubKey().GetID()); |
|
|
|
|
txToNonStd2.vout[0].nValue = 1000; |
|
|
|
|
txToNonStd2.vin.resize(1); |
|
|
|
|
txToNonStd2.vin[0].prevout.n = 6; |
|
|
|
|