diff options
author | Pieter Wuille <pieter@wuille.net> | 2021-07-09 09:58:34 -0700 |
---|---|---|
committer | Pieter Wuille <pieter@wuille.net> | 2021-07-15 17:08:52 -0700 |
commit | 8465978f235e2e43feb5dabe2a4d61026343b6ab (patch) | |
tree | b9ec72931dde0e0e527589c9fbe29c46720db9e1 /src | |
parent | a88fa1a555195af6543cdc802e8e1c2e1668dd38 (diff) |
Make IsSegWitOutput return true for taproot outputs
Diffstat (limited to 'src')
-rw-r--r-- | src/script/sign.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 65276f641f..7864e690d8 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -612,15 +612,18 @@ bool IsSolvable(const SigningProvider& provider, const CScript& script) bool IsSegWitOutput(const SigningProvider& provider, const CScript& script) { - std::vector<valtype> solutions; - auto whichtype = Solver(script, solutions); - if (whichtype == TxoutType::WITNESS_V0_SCRIPTHASH || whichtype == TxoutType::WITNESS_V0_KEYHASH || whichtype == TxoutType::WITNESS_UNKNOWN) return true; - if (whichtype == TxoutType::SCRIPTHASH) { - auto h160 = uint160(solutions[0]); - CScript subscript; - if (provider.GetCScript(CScriptID{h160}, subscript)) { - whichtype = Solver(subscript, solutions); - if (whichtype == TxoutType::WITNESS_V0_SCRIPTHASH || whichtype == TxoutType::WITNESS_V0_KEYHASH || whichtype == TxoutType::WITNESS_UNKNOWN) return true; + int version; + valtype program; + if (script.IsWitnessProgram(version, program)) return true; + if (script.IsPayToScriptHash()) { + std::vector<valtype> solutions; + auto whichtype = Solver(script, solutions); + if (whichtype == TxoutType::SCRIPTHASH) { + auto h160 = uint160(solutions[0]); + CScript subscript; + if (provider.GetCScript(CScriptID{h160}, subscript)) { + if (subscript.IsWitnessProgram(version, program)) return true; + } } } return false; |