Changeset View
Changeset View
Standalone View
Standalone View
src/test/transaction_tests.cpp
Show First 20 Lines • Show All 300 Lines • ▼ Show 20 Lines | SetupDummyInputs(CBasicKeyStore &keystoreRet, CCoinsViewCache &coinsRet) { | ||||
dummyTransactions[0].vout[1].nValue = 50 * CENT; | dummyTransactions[0].vout[1].nValue = 50 * CENT; | ||||
dummyTransactions[0].vout[1].scriptPubKey | dummyTransactions[0].vout[1].scriptPubKey | ||||
<< ToByteVector(key[1].GetPubKey()) << OP_CHECKSIG; | << ToByteVector(key[1].GetPubKey()) << OP_CHECKSIG; | ||||
AddCoins(coinsRet, CTransaction(dummyTransactions[0]), 0); | AddCoins(coinsRet, CTransaction(dummyTransactions[0]), 0); | ||||
dummyTransactions[1].vout.resize(2); | dummyTransactions[1].vout.resize(2); | ||||
dummyTransactions[1].vout[0].nValue = 21 * CENT; | dummyTransactions[1].vout[0].nValue = 21 * CENT; | ||||
dummyTransactions[1].vout[0].scriptPubKey = | dummyTransactions[1].vout[0].scriptPubKey = | ||||
GetScriptForDestination(key[2].GetPubKey().GetID()); | GetScriptForDestination(PKHash(key[2].GetPubKey())); | ||||
dummyTransactions[1].vout[1].nValue = 22 * CENT; | dummyTransactions[1].vout[1].nValue = 22 * CENT; | ||||
dummyTransactions[1].vout[1].scriptPubKey = | dummyTransactions[1].vout[1].scriptPubKey = | ||||
GetScriptForDestination(key[3].GetPubKey().GetID()); | GetScriptForDestination(PKHash(key[3].GetPubKey())); | ||||
AddCoins(coinsRet, CTransaction(dummyTransactions[1]), 0); | AddCoins(coinsRet, CTransaction(dummyTransactions[1]), 0); | ||||
return dummyTransactions; | return dummyTransactions; | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(test_Get) { | BOOST_AUTO_TEST_CASE(test_Get) { | ||||
CBasicKeyStore keystore; | CBasicKeyStore keystore; | ||||
CCoinsView coinsDummy; | CCoinsView coinsDummy; | ||||
▲ Show 20 Lines • Show All 240 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(test_witness) { | ||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | ||||
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | ||||
CheckWithFlag(output1, input2, 0, false); | CheckWithFlag(output1, input2, 0, false); | ||||
CheckWithFlag(output1, input2, SCRIPT_VERIFY_P2SH, false); | CheckWithFlag(output1, input2, SCRIPT_VERIFY_P2SH, false); | ||||
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false); | CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false); | ||||
// P2SH pay-to-compressed-pubkey. | // P2SH pay-to-compressed-pubkey. | ||||
CreateCreditAndSpend(keystore, | CreateCreditAndSpend(keystore, | ||||
GetScriptForDestination(CScriptID(scriptPubkey1)), | GetScriptForDestination(ScriptHash(scriptPubkey1)), | ||||
output1, input1); | output1, input1); | ||||
CreateCreditAndSpend(keystore, | CreateCreditAndSpend(keystore, | ||||
GetScriptForDestination(CScriptID(scriptPubkey2)), | GetScriptForDestination(ScriptHash(scriptPubkey2)), | ||||
output2, input2); | output2, input2); | ||||
ReplaceRedeemScript(input2.vin[0].scriptSig, scriptPubkey1); | ReplaceRedeemScript(input2.vin[0].scriptSig, scriptPubkey1); | ||||
CheckWithFlag(output1, input1, 0, true); | CheckWithFlag(output1, input1, 0, true); | ||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | ||||
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | ||||
CheckWithFlag(output1, input2, 0, true); | CheckWithFlag(output1, input2, 0, true); | ||||
CheckWithFlag(output1, input2, SCRIPT_VERIFY_P2SH, false); | CheckWithFlag(output1, input2, SCRIPT_VERIFY_P2SH, false); | ||||
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false); | CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false); | ||||
// Normal pay-to-uncompressed-pubkey. | // Normal pay-to-uncompressed-pubkey. | ||||
CreateCreditAndSpend(keystore, scriptPubkey1L, output1, input1); | CreateCreditAndSpend(keystore, scriptPubkey1L, output1, input1); | ||||
CreateCreditAndSpend(keystore, scriptPubkey2L, output2, input2); | CreateCreditAndSpend(keystore, scriptPubkey2L, output2, input2); | ||||
CheckWithFlag(output1, input1, 0, true); | CheckWithFlag(output1, input1, 0, true); | ||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | ||||
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | ||||
CheckWithFlag(output1, input2, 0, false); | CheckWithFlag(output1, input2, 0, false); | ||||
CheckWithFlag(output1, input2, SCRIPT_VERIFY_P2SH, false); | CheckWithFlag(output1, input2, SCRIPT_VERIFY_P2SH, false); | ||||
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false); | CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false); | ||||
// P2SH pay-to-uncompressed-pubkey. | // P2SH pay-to-uncompressed-pubkey. | ||||
CreateCreditAndSpend(keystore, | CreateCreditAndSpend(keystore, | ||||
GetScriptForDestination(CScriptID(scriptPubkey1L)), | GetScriptForDestination(ScriptHash(scriptPubkey1L)), | ||||
output1, input1); | output1, input1); | ||||
CreateCreditAndSpend(keystore, | CreateCreditAndSpend(keystore, | ||||
GetScriptForDestination(CScriptID(scriptPubkey2L)), | GetScriptForDestination(ScriptHash(scriptPubkey2L)), | ||||
output2, input2); | output2, input2); | ||||
ReplaceRedeemScript(input2.vin[0].scriptSig, scriptPubkey1L); | ReplaceRedeemScript(input2.vin[0].scriptSig, scriptPubkey1L); | ||||
CheckWithFlag(output1, input1, 0, true); | CheckWithFlag(output1, input1, 0, true); | ||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | ||||
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | ||||
CheckWithFlag(output1, input2, 0, true); | CheckWithFlag(output1, input2, 0, true); | ||||
CheckWithFlag(output1, input2, SCRIPT_VERIFY_P2SH, false); | CheckWithFlag(output1, input2, SCRIPT_VERIFY_P2SH, false); | ||||
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false); | CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false); | ||||
// Normal 2-of-2 multisig | // Normal 2-of-2 multisig | ||||
CreateCreditAndSpend(keystore, scriptMulti, output1, input1, false); | CreateCreditAndSpend(keystore, scriptMulti, output1, input1, false); | ||||
CheckWithFlag(output1, input1, 0, false); | CheckWithFlag(output1, input1, 0, false); | ||||
CreateCreditAndSpend(keystore2, scriptMulti, output2, input2, false); | CreateCreditAndSpend(keystore2, scriptMulti, output2, input2, false); | ||||
CheckWithFlag(output2, input2, 0, false); | CheckWithFlag(output2, input2, 0, false); | ||||
BOOST_CHECK(*output1 == *output2); | BOOST_CHECK(*output1 == *output2); | ||||
UpdateInput(input1.vin[0], CombineSignatures(input1, input2, output1)); | UpdateInput(input1.vin[0], CombineSignatures(input1, input2, output1)); | ||||
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | ||||
// P2SH 2-of-2 multisig | // P2SH 2-of-2 multisig | ||||
CreateCreditAndSpend(keystore, | CreateCreditAndSpend(keystore, | ||||
GetScriptForDestination(CScriptID(scriptMulti)), | GetScriptForDestination(ScriptHash(scriptMulti)), | ||||
output1, input1, false); | output1, input1, false); | ||||
CheckWithFlag(output1, input1, 0, true); | CheckWithFlag(output1, input1, 0, true); | ||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, false); | CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, false); | ||||
CreateCreditAndSpend(keystore2, | CreateCreditAndSpend(keystore2, | ||||
GetScriptForDestination(CScriptID(scriptMulti)), | GetScriptForDestination(ScriptHash(scriptMulti)), | ||||
output2, input2, false); | output2, input2, false); | ||||
CheckWithFlag(output2, input2, 0, true); | CheckWithFlag(output2, input2, 0, true); | ||||
CheckWithFlag(output2, input2, SCRIPT_VERIFY_P2SH, false); | CheckWithFlag(output2, input2, SCRIPT_VERIFY_P2SH, false); | ||||
BOOST_CHECK(*output1 == *output2); | BOOST_CHECK(*output1 == *output2); | ||||
UpdateInput(input1.vin[0], CombineSignatures(input1, input2, output1)); | UpdateInput(input1.vin[0], CombineSignatures(input1, input2, output1)); | ||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true); | ||||
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true); | ||||
} | } | ||||
Show All 9 Lines | BOOST_AUTO_TEST_CASE(test_IsStandard) { | ||||
CMutableTransaction t; | CMutableTransaction t; | ||||
t.vin.resize(1); | t.vin.resize(1); | ||||
t.vin[0].prevout = COutPoint(dummyTransactions[0].GetId(), 1); | t.vin[0].prevout = COutPoint(dummyTransactions[0].GetId(), 1); | ||||
t.vin[0].scriptSig << std::vector<uint8_t>(65, 0); | t.vin[0].scriptSig << std::vector<uint8_t>(65, 0); | ||||
t.vout.resize(1); | t.vout.resize(1); | ||||
t.vout[0].nValue = 90 * CENT; | t.vout[0].nValue = 90 * CENT; | ||||
CKey key; | CKey key; | ||||
key.MakeNewKey(true); | key.MakeNewKey(true); | ||||
t.vout[0].scriptPubKey = GetScriptForDestination(key.GetPubKey().GetID()); | t.vout[0].scriptPubKey = GetScriptForDestination(PKHash(key.GetPubKey())); | ||||
std::string reason; | std::string reason; | ||||
BOOST_CHECK(IsStandardTx(CTransaction(t), reason)); | BOOST_CHECK(IsStandardTx(CTransaction(t), reason)); | ||||
// Check dust with default relay fee: | // Check dust with default relay fee: | ||||
Amount nDustThreshold = 3 * 182 * dustRelayFee.GetFeePerK() / 1000; | Amount nDustThreshold = 3 * 182 * dustRelayFee.GetFeePerK() / 1000; | ||||
BOOST_CHECK_EQUAL(nDustThreshold, 546 * SATOSHI); | BOOST_CHECK_EQUAL(nDustThreshold, 546 * SATOSHI); | ||||
// dust: | // dust: | ||||
▲ Show 20 Lines • Show All 151 Lines • Show Last 20 Lines |