aboutsummaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorPieter Wuille <pieter@wuille.net>2021-05-23 18:00:18 -0700
committerPieter Wuille <pieter@wuille.net>2021-05-24 12:14:16 -0700
commit31df02a07091dbd5e0b315c8e5695e808f3a5505 (patch)
treeb995d5be2e2437ce89e06e60f613504f1a1b9fd6 /src/script
parent4b1cc08f9f94a1e6e1ecba6b97f99b73fb513872 (diff)
downloadbitcoin-31df02a07091dbd5e0b315c8e5695e808f3a5505.tar.xz
Change Solver() output for WITNESS_V1_TAPROOT
This is just a small simplification to prepare for the follow-up instruction of a CTxDestination variant for taproot outputs. In the old code, WITNESS_V1_TAPROOT and WITNESS_UNKNOWN both produced {version, program} as Solver() output. Change this so that WITNESS_V1_TAPROOT produces just {program}, like WITNESS_V0_* do.
Diffstat (limited to 'src/script')
-rw-r--r--src/script/standard.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/script/standard.cpp b/src/script/standard.cpp
index 364fac3c84..540aa0f2d9 100644
--- a/src/script/standard.cpp
+++ b/src/script/standard.cpp
@@ -155,15 +155,14 @@ TxoutType Solver(const CScript& scriptPubKey, std::vector<std::vector<unsigned c
std::vector<unsigned char> witnessprogram;
if (scriptPubKey.IsWitnessProgram(witnessversion, witnessprogram)) {
if (witnessversion == 0 && witnessprogram.size() == WITNESS_V0_KEYHASH_SIZE) {
- vSolutionsRet.push_back(witnessprogram);
+ vSolutionsRet.push_back(std::move(witnessprogram));
return TxoutType::WITNESS_V0_KEYHASH;
}
if (witnessversion == 0 && witnessprogram.size() == WITNESS_V0_SCRIPTHASH_SIZE) {
- vSolutionsRet.push_back(witnessprogram);
+ vSolutionsRet.push_back(std::move(witnessprogram));
return TxoutType::WITNESS_V0_SCRIPTHASH;
}
if (witnessversion == 1 && witnessprogram.size() == WITNESS_V1_TAPROOT_SIZE) {
- vSolutionsRet.push_back(std::vector<unsigned char>{(unsigned char)witnessversion});
vSolutionsRet.push_back(std::move(witnessprogram));
return TxoutType::WITNESS_V1_TAPROOT;
}
@@ -242,8 +241,17 @@ bool ExtractDestination(const CScript& scriptPubKey, CTxDestination& addressRet)
addressRet = hash;
return true;
}
- case TxoutType::WITNESS_UNKNOWN:
case TxoutType::WITNESS_V1_TAPROOT: {
+ /* For now, no WitnessV1Taproot variant in CTxDestination exists, so map
+ * this to WitnessUnknown. */
+ WitnessUnknown unk;
+ unk.version = 1;
+ std::copy(vSolutions[0].begin(), vSolutions[0].end(), unk.program);
+ unk.length = vSolutions[0].size();
+ addressRet = unk;
+ return true;
+ }
+ case TxoutType::WITNESS_UNKNOWN: {
WitnessUnknown unk;
unk.version = vSolutions[0][0];
std::copy(vSolutions[1].begin(), vSolutions[1].end(), unk.program);