Skip to content

Commit b887060

Browse files
committed
Replace usage of GetScriptForWitness with GetScriptForDestination
1 parent 8a85377 commit b887060

6 files changed

+35
-44
lines changed

src/bitcoin-tx.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,8 @@ static void MutateTxAddOutPubKey(CMutableTransaction& tx, const std::string& str
320320
if (!pubkey.IsCompressed()) {
321321
throw std::runtime_error("Uncompressed pubkeys are not useable for SegWit outputs");
322322
}
323-
// Call GetScriptForWitness() to build a P2WSH scriptPubKey
324-
scriptPubKey = GetScriptForWitness(scriptPubKey);
323+
// Build a P2WPKH script
324+
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(pubkey));
325325
}
326326
if (bScriptHash) {
327327
// Get the ID for the script, and then construct a P2SH destination for it.
@@ -390,8 +390,8 @@ static void MutateTxAddOutMultiSig(CMutableTransaction& tx, const std::string& s
390390
throw std::runtime_error("Uncompressed pubkeys are not useable for SegWit outputs");
391391
}
392392
}
393-
// Call GetScriptForWitness() to build a P2WSH scriptPubKey
394-
scriptPubKey = GetScriptForWitness(scriptPubKey);
393+
// Build a P2WSH with the multisig script
394+
scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(scriptPubKey));
395395
}
396396
if (bScriptHash) {
397397
if (scriptPubKey.size() > MAX_SCRIPT_ELEMENT_SIZE) {
@@ -464,7 +464,7 @@ static void MutateTxAddOutScript(CMutableTransaction& tx, const std::string& str
464464
}
465465

466466
if (bSegWit) {
467-
scriptPubKey = GetScriptForWitness(scriptPubKey);
467+
scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(scriptPubKey));
468468
}
469469
if (bScriptHash) {
470470
if (scriptPubKey.size() > MAX_SCRIPT_ELEMENT_SIZE) {

src/test/fuzz/script.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ void test_one_input(const std::vector<uint8_t>& buffer)
6363
int required_ret;
6464
(void)ExtractDestinations(script, type_ret, addresses, required_ret);
6565

66-
(void)GetScriptForWitness(script);
67-
6866
const FlatSigningProvider signing_provider;
6967
(void)InferDescriptor(script, signing_provider);
7068

src/test/script_standard_tests.cpp

+6-11
Original file line numberDiff line numberDiff line change
@@ -349,21 +349,16 @@ BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
349349
result = GetScriptForMultisig(2, std::vector<CPubKey>(pubkeys, pubkeys + 3));
350350
BOOST_CHECK(result == expected);
351351

352-
// GetScriptForWitness
353-
CScript witnessScript;
354-
355-
witnessScript << ToByteVector(pubkeys[0]) << OP_CHECKSIG;
352+
// WitnessV0KeyHash
356353
expected.clear();
357354
expected << OP_0 << ToByteVector(pubkeys[0].GetID());
358-
result = GetScriptForWitness(witnessScript);
355+
result = GetScriptForDestination(WitnessV0KeyHash(Hash160(ToByteVector(pubkeys[0]))));
359356
BOOST_CHECK(result == expected);
360-
361-
witnessScript.clear();
362-
witnessScript << OP_DUP << OP_HASH160 << ToByteVector(pubkeys[0].GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;
363-
result = GetScriptForWitness(witnessScript);
357+
result = GetScriptForDestination(WitnessV0KeyHash(pubkeys[0].GetID()));
364358
BOOST_CHECK(result == expected);
365359

366-
witnessScript.clear();
360+
// WitnessV0ScriptHash (multisig)
361+
CScript witnessScript;
367362
witnessScript << OP_1 << ToByteVector(pubkeys[0]) << OP_1 << OP_CHECKMULTISIG;
368363

369364
uint256 scriptHash;
@@ -372,7 +367,7 @@ BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
372367

373368
expected.clear();
374369
expected << OP_0 << ToByteVector(scriptHash);
375-
result = GetScriptForWitness(witnessScript);
370+
result = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));
376371
BOOST_CHECK(result == expected);
377372
}
378373

src/test/sigopcount_tests.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,7 @@ BOOST_AUTO_TEST_CASE(GetTxSigOpCost)
154154

155155
// P2WPKH witness program
156156
{
157-
CScript p2pk = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;
158-
CScript scriptPubKey = GetScriptForWitness(p2pk);
157+
CScript scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(pubkey));
159158
CScript scriptSig = CScript();
160159
CScriptWitness scriptWitness;
161160
scriptWitness.stack.push_back(std::vector<unsigned char>(0));
@@ -183,8 +182,7 @@ BOOST_AUTO_TEST_CASE(GetTxSigOpCost)
183182

184183
// P2WPKH nested in P2SH
185184
{
186-
CScript p2pk = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;
187-
CScript scriptSig = GetScriptForWitness(p2pk);
185+
CScript scriptSig = GetScriptForDestination(WitnessV0KeyHash(pubkey));
188186
CScript scriptPubKey = GetScriptForDestination(ScriptHash(scriptSig));
189187
scriptSig = CScript() << ToByteVector(scriptSig);
190188
CScriptWitness scriptWitness;
@@ -199,7 +197,7 @@ BOOST_AUTO_TEST_CASE(GetTxSigOpCost)
199197
// P2WSH witness program
200198
{
201199
CScript witnessScript = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(pubkey) << 2 << OP_CHECKMULTISIGVERIFY;
202-
CScript scriptPubKey = GetScriptForWitness(witnessScript);
200+
CScript scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));
203201
CScript scriptSig = CScript();
204202
CScriptWitness scriptWitness;
205203
scriptWitness.stack.push_back(std::vector<unsigned char>(0));
@@ -215,7 +213,7 @@ BOOST_AUTO_TEST_CASE(GetTxSigOpCost)
215213
// P2WSH nested in P2SH
216214
{
217215
CScript witnessScript = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(pubkey) << 2 << OP_CHECKMULTISIGVERIFY;
218-
CScript redeemScript = GetScriptForWitness(witnessScript);
216+
CScript redeemScript = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));
219217
CScript scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));
220218
CScript scriptSig = CScript() << ToByteVector(redeemScript);
221219
CScriptWitness scriptWitness;

src/test/transaction_tests.cpp

+19-19
Original file line numberDiff line numberDiff line change
@@ -499,13 +499,13 @@ BOOST_AUTO_TEST_CASE(test_witness)
499499
BOOST_CHECK(keystore.AddCScript(scriptPubkey1L));
500500
BOOST_CHECK(keystore.AddCScript(scriptPubkey2L));
501501
BOOST_CHECK(keystore.AddCScript(scriptMulti));
502-
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptPubkey1)));
503-
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptPubkey2)));
504-
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptPubkey1L)));
505-
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptPubkey2L)));
506-
BOOST_CHECK(keystore.AddCScript(GetScriptForWitness(scriptMulti)));
502+
BOOST_CHECK(keystore.AddCScript(GetScriptForDestination(WitnessV0KeyHash(pubkey1.GetID()))));
503+
BOOST_CHECK(keystore.AddCScript(GetScriptForDestination(WitnessV0KeyHash(pubkey2.GetID()))));
504+
BOOST_CHECK(keystore.AddCScript(GetScriptForDestination(WitnessV0KeyHash(pubkey1L.GetID()))));
505+
BOOST_CHECK(keystore.AddCScript(GetScriptForDestination(WitnessV0KeyHash(pubkey2L.GetID()))));
506+
BOOST_CHECK(keystore.AddCScript(GetScriptForDestination(WitnessV0ScriptHash(scriptMulti))));
507507
BOOST_CHECK(keystore2.AddCScript(scriptMulti));
508-
BOOST_CHECK(keystore2.AddCScript(GetScriptForWitness(scriptMulti)));
508+
BOOST_CHECK(keystore2.AddCScript(GetScriptForDestination(WitnessV0ScriptHash(scriptMulti))));
509509
BOOST_CHECK(keystore2.AddKeyPubKey(key3, pubkey3));
510510

511511
CTransactionRef output1, output2;
@@ -537,8 +537,8 @@ BOOST_AUTO_TEST_CASE(test_witness)
537537
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false);
538538

539539
// Witness pay-to-compressed-pubkey (v0).
540-
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptPubkey1), output1, input1);
541-
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptPubkey2), output2, input2);
540+
CreateCreditAndSpend(keystore, GetScriptForDestination(WitnessV0KeyHash(pubkey1.GetID())), output1, input1);
541+
CreateCreditAndSpend(keystore, GetScriptForDestination(WitnessV0KeyHash(pubkey2.GetID())), output2, input2);
542542
CheckWithFlag(output1, input1, 0, true);
543543
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true);
544544
CheckWithFlag(output1, input1, SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH, true);
@@ -549,9 +549,9 @@ BOOST_AUTO_TEST_CASE(test_witness)
549549
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false);
550550

551551
// P2SH witness pay-to-compressed-pubkey (v0).
552-
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptPubkey1))), output1, input1);
553-
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptPubkey2))), output2, input2);
554-
ReplaceRedeemScript(input2.vin[0].scriptSig, GetScriptForWitness(scriptPubkey1));
552+
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForDestination(WitnessV0KeyHash(pubkey1.GetID())))), output1, input1);
553+
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForDestination(WitnessV0KeyHash(pubkey2.GetID())))), output2, input2);
554+
ReplaceRedeemScript(input2.vin[0].scriptSig, GetScriptForDestination(WitnessV0KeyHash(pubkey1.GetID())));
555555
CheckWithFlag(output1, input1, 0, true);
556556
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true);
557557
CheckWithFlag(output1, input1, SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH, true);
@@ -587,12 +587,12 @@ BOOST_AUTO_TEST_CASE(test_witness)
587587
CheckWithFlag(output1, input2, STANDARD_SCRIPT_VERIFY_FLAGS, false);
588588

589589
// Signing disabled for witness pay-to-uncompressed-pubkey (v1).
590-
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptPubkey1L), output1, input1, false);
591-
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptPubkey2L), output2, input2, false);
590+
CreateCreditAndSpend(keystore, GetScriptForDestination(WitnessV0KeyHash(pubkey1L.GetID())), output1, input1, false);
591+
CreateCreditAndSpend(keystore, GetScriptForDestination(WitnessV0KeyHash(pubkey2L.GetID())), output2, input2, false);
592592

593593
// Signing disabled for P2SH witness pay-to-uncompressed-pubkey (v1).
594-
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptPubkey1L))), output1, input1, false);
595-
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptPubkey2L))), output2, input2, false);
594+
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForDestination(WitnessV0KeyHash(pubkey1L.GetID())))), output1, input1, false);
595+
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForDestination(WitnessV0KeyHash(pubkey2L.GetID())))), output2, input2, false);
596596

597597
// Normal 2-of-2 multisig
598598
CreateCreditAndSpend(keystore, scriptMulti, output1, input1, false);
@@ -616,10 +616,10 @@ BOOST_AUTO_TEST_CASE(test_witness)
616616
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true);
617617

618618
// Witness 2-of-2 multisig
619-
CreateCreditAndSpend(keystore, GetScriptForWitness(scriptMulti), output1, input1, false);
619+
CreateCreditAndSpend(keystore, GetScriptForDestination(WitnessV0ScriptHash(scriptMulti)), output1, input1, false);
620620
CheckWithFlag(output1, input1, 0, true);
621621
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS, false);
622-
CreateCreditAndSpend(keystore2, GetScriptForWitness(scriptMulti), output2, input2, false);
622+
CreateCreditAndSpend(keystore2, GetScriptForDestination(WitnessV0ScriptHash(scriptMulti)), output2, input2, false);
623623
CheckWithFlag(output2, input2, 0, true);
624624
CheckWithFlag(output2, input2, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS, false);
625625
BOOST_CHECK(*output1 == *output2);
@@ -628,10 +628,10 @@ BOOST_AUTO_TEST_CASE(test_witness)
628628
CheckWithFlag(output1, input1, STANDARD_SCRIPT_VERIFY_FLAGS, true);
629629

630630
// P2SH witness 2-of-2 multisig
631-
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptMulti))), output1, input1, false);
631+
CreateCreditAndSpend(keystore, GetScriptForDestination(ScriptHash(GetScriptForDestination(WitnessV0ScriptHash(scriptMulti)))), output1, input1, false);
632632
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH, true);
633633
CheckWithFlag(output1, input1, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS, false);
634-
CreateCreditAndSpend(keystore2, GetScriptForDestination(ScriptHash(GetScriptForWitness(scriptMulti))), output2, input2, false);
634+
CreateCreditAndSpend(keystore2, GetScriptForDestination(ScriptHash(GetScriptForDestination(WitnessV0ScriptHash(scriptMulti)))), output2, input2, false);
635635
CheckWithFlag(output2, input2, SCRIPT_VERIFY_P2SH, true);
636636
CheckWithFlag(output2, input2, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS, false);
637637
BOOST_CHECK(*output1 == *output2);

src/test/txvalidationcache_tests.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ BOOST_FIXTURE_TEST_CASE(checkinputs_test, TestChain100Setup)
157157
CScript p2pk_scriptPubKey = CScript() << ToByteVector(coinbaseKey.GetPubKey()) << OP_CHECKSIG;
158158
CScript p2sh_scriptPubKey = GetScriptForDestination(ScriptHash(p2pk_scriptPubKey));
159159
CScript p2pkh_scriptPubKey = GetScriptForDestination(PKHash(coinbaseKey.GetPubKey()));
160-
CScript p2wpkh_scriptPubKey = GetScriptForWitness(p2pkh_scriptPubKey);
160+
CScript p2wpkh_scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(coinbaseKey.GetPubKey()));
161161

162162
FillableSigningProvider keystore;
163163
BOOST_CHECK(keystore.AddKey(coinbaseKey));

0 commit comments

Comments
 (0)