mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 14:38:29 +01:00
Merge #16841: Replace GetScriptForWitness with GetScriptForDestination
7966aa424aAdd variables for repeated scripts (MeshCollider)fec8336ad9Remove GetScriptForWitness function (MeshCollider)b887060d06Replace usage of GetScriptForWitness with GetScriptForDestination (MeshCollider) Pull request description: As per this TODO in the code: > TODO: replace calls to GetScriptForWitness with GetScriptForDestination using the various witness-specific CTxDestination subtypes. The commit "Add additional check for P2SH before adding extra wrapper" also adds an additional check that the scriptPubKey is a P2SH before auto-wrapping the witness script. We shouldn't wrap the witness script if not. Note: #16251 is even better than this check, please review that. ACKs for top commit: instagibbs: ACK7966aa424ajonatack: Code review re-ACK7966aa4per `git range-diffb4d0366ed266f7 7966aa4` achow101: re-ACK7966aa424aonly changes since last is rebase. Tree-SHA512: 3449e0e83bd842acc7c94544a85367da97ac20d859eefc1a618caef0c98204398c266fe8fb9600b78326df5175402e1ae4a132eb766e2c4485e7cda6a2a95c43
This commit is contained in:
@@ -501,13 +501,19 @@ BOOST_AUTO_TEST_CASE(test_witness)
|
||||
BOOST_CHECK(keystore.AddCScript(scriptPubkey1L));
|
||||
BOOST_CHECK(keystore.AddCScript(scriptPubkey2L));
|
||||
BOOST_CHECK(keystore.AddCScript(scriptMulti));
|
||||
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptPubkey1)));
|
||||
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptPubkey2)));
|
||||
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptPubkey1L)));
|
||||
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptPubkey2L)));
|
||||
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptMulti)));
|
||||
CScript destination_script_1, destination_script_2, destination_script_1L, destination_script_2L, destination_script_multi;
|
||||
destination_script_1 = GetScriptForDestination(WitnessV0KeyHash(pubkey1));
|
||||
destination_script_2 = GetScriptForDestination(WitnessV0KeyHash(pubkey2));
|
||||
destination_script_1L = GetScriptForDestination(WitnessV0KeyHash(pubkey1L));
|
||||
destination_script_2L = GetScriptForDestination(WitnessV0KeyHash(pubkey2L));
|
||||
destination_script_multi = GetScriptForDestination(WitnessV0ScriptHash(scriptMulti));
|
||||
BOOST_CHECK(keystore.AddCScript(destination_script_1));
|
||||
BOOST_CHECK(keystore.AddCScript(destination_script_2));
|
||||
BOOST_CHECK(keystore.AddCScript(destination_script_1L));
|
||||
BOOST_CHECK(keystore.AddCScript(destination_script_2L));
|
||||
BOOST_CHECK(keystore.AddCScript(destination_script_multi));
|
||||
BOOST_CHECK(keystore2.AddCScript(scriptMulti));
|
||||
BOOST_CHECK(keystore2.AddCScript(GetScriptForWitness(scriptMulti)));
|
||||
BOOST_CHECK(keystore2.AddCScript(destination_script_multi));
|
||||
BOOST_CHECK(keystore2.AddKeyPubKey(key3, pubkey3));
|
||||
|
||||
CTransactionRef output1, output2;
|
||||
@@ -539,8 +545,8 @@ BOOST_AUTO_TEST_CASE(test_witness)
|
||||
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false);
|
||||
|
||||
// Witness pay-to-compressed-pubkey (v0).
|
||||
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptPubkey1), output1, input1);
|
||||
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptPubkey2), output2, input2);
|
||||
CreateCreditAndSpend(keystore, destination_script_1, output1, input1);
|
||||
CreateCreditAndSpend(keystore, destination_script_2, output2, input2);
|
||||
CheckWithFlag(output1, input1, 0, true);
|
||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true);
|
||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH, true);
|
||||
@@ -551,9 +557,9 @@ BOOST_AUTO_TEST_CASE(test_witness)
|
||||
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false);
|
||||
|
||||
// P2SH witness pay-to-compressed-pubkey (v0).
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptPubkey1))), output1, input1);
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptPubkey2))), output2, input2);
|
||||
ReplaceRedeemScript(input2.vin[0].scriptSig, GetScriptForWitness(scriptPubkey1));
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(destination_script_1)), output1, input1);
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(destination_script_2)), output2, input2);
|
||||
ReplaceRedeemScript(input2.vin[0].scriptSig, destination_script_1);
|
||||
CheckWithFlag(output1, input1, 0, true);
|
||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true);
|
||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH, true);
|
||||
@@ -589,12 +595,12 @@ BOOST_AUTO_TEST_CASE(test_witness)
|
||||
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false);
|
||||
|
||||
// Signing disabled for witness pay-to-uncompressed-pubkey (v1).
|
||||
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptPubkey1L), output1, input1, false);
|
||||
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptPubkey2L), output2, input2, false);
|
||||
CreateCreditAndSpend(keystore, destination_script_1L, output1, input1, false);
|
||||
CreateCreditAndSpend(keystore, destination_script_2L, output2, input2, false);
|
||||
|
||||
// Signing disabled for P2SH witness pay-to-uncompressed-pubkey (v1).
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptPubkey1L))), output1, input1, false);
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptPubkey2L))), output2, input2, false);
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(destination_script_1L)), output1, input1, false);
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(destination_script_2L)), output2, input2, false);
|
||||
|
||||
// Normal 2-of-2 multisig
|
||||
CreateCreditAndSpend(keystore, scriptMulti, output1, input1, false);
|
||||
@@ -618,10 +624,10 @@ BOOST_AUTO_TEST_CASE(test_witness)
|
||||
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true);
|
||||
|
||||
// Witness 2-of-2 multisig
|
||||
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptMulti), output1, input1, false);
|
||||
CreateCreditAndSpend(keystore, destination_script_multi, output1, input1, false);
|
||||
CheckWithFlag(output1, input1, 0, true);
|
||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS, false);
|
||||
CreateCreditAndSpend(keystore2, GetScriptForWitness(scriptMulti), output2, input2, false);
|
||||
CreateCreditAndSpend(keystore2, destination_script_multi, output2, input2, false);
|
||||
CheckWithFlag(output2, input2, 0, true);
|
||||
CheckWithFlag(output2, input2, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS, false);
|
||||
BOOST_CHECK(*output1 == *output2);
|
||||
@@ -630,10 +636,10 @@ BOOST_AUTO_TEST_CASE(test_witness)
|
||||
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true);
|
||||
|
||||
// P2SH witness 2-of-2 multisig
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptMulti))), output1, input1, false);
|
||||
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(destination_script_multi)), output1, input1, false);
|
||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true);
|
||||
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS, false);
|
||||
CreateCreditAndSpend(keystore2, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptMulti))), output2, input2, false);
|
||||
CreateCreditAndSpend(keystore2, GetScriptForDestination(ScriptHash(destination_script_multi)), output2, input2, false);
|
||||
CheckWithFlag(output2, input2, SCRIPT_VERIFY_P2SH, true);
|
||||
CheckWithFlag(output2, input2, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS, false);
|
||||
BOOST_CHECK(*output1 == *output2);
|
||||
|
||||
Reference in New Issue
Block a user