|
|
|
@ -1361,7 +1361,7 @@ static bool VerifyWitnessProgram(const CScriptWitness& witness, int witversion,
|
|
|
|
|
CScript scriptPubKey;
|
|
|
|
|
|
|
|
|
|
if (witversion == 0) {
|
|
|
|
|
if (program.size() == 32) {
|
|
|
|
|
if (program.size() == WITNESS_V0_SCRIPTHASH_SIZE) {
|
|
|
|
|
// Version 0 segregated witness program: SHA256(CScript) inside the program, CScript + inputs in witness
|
|
|
|
|
if (witness.stack.size() == 0) {
|
|
|
|
|
return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY);
|
|
|
|
@ -1373,7 +1373,7 @@ static bool VerifyWitnessProgram(const CScriptWitness& witness, int witversion,
|
|
|
|
|
if (memcmp(hashScriptPubKey.begin(), program.data(), 32)) {
|
|
|
|
|
return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH);
|
|
|
|
|
}
|
|
|
|
|
} else if (program.size() == 20) {
|
|
|
|
|
} else if (program.size() == WITNESS_V0_KEYHASH_SIZE) {
|
|
|
|
|
// Special case for pay-to-pubkeyhash; signature + pubkey in witness
|
|
|
|
|
if (witness.stack.size() != 2) {
|
|
|
|
|
return set_error(serror, SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH); // 2 items in witness
|
|
|
|
@ -1530,10 +1530,10 @@ bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const C
|
|
|
|
|
size_t static WitnessSigOps(int witversion, const std::vector<unsigned char>& witprogram, const CScriptWitness& witness, int flags)
|
|
|
|
|
{
|
|
|
|
|
if (witversion == 0) {
|
|
|
|
|
if (witprogram.size() == 20)
|
|
|
|
|
if (witprogram.size() == WITNESS_V0_KEYHASH_SIZE)
|
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
|
|
if (witprogram.size() == 32 && witness.stack.size() > 0) {
|
|
|
|
|
if (witprogram.size() == WITNESS_V0_SCRIPTHASH_SIZE && witness.stack.size() > 0) {
|
|
|
|
|
CScript subscript(witness.stack.back().begin(), witness.stack.back().end());
|
|
|
|
|
return subscript.GetSigOpCount(true);
|
|
|
|
|
}
|
|
|
|
|