Do not expose SigVersion argument to IsMine

Only IsMine's internal code needs this, as part of a recursion into P2SH and P2WSH
scripts. The exposed functions always operate on actual scriptPubKeys and not on
redeemScripts or witness scripts.

Zcash: Rewrote this commit so that it instead adds an internal
SigVersion argument (which we didn't have because it was added to
support SegWit logic).

Co-authored-by: Jack Grigg <jack@z.cash>
This commit is contained in:
Pieter Wuille 2018-04-16 16:10:21 -07:00 committed by Jack Grigg
parent df00e51e3e
commit 030e173d98
No known key found for this signature in database
GPG Key ID: 9E8255172BBF9898
1 changed files with 13 additions and 8 deletions

View File

@ -29,13 +29,7 @@ unsigned int HaveKeys(const vector<valtype>& pubkeys, const CKeyStore& keystore)
return nResult; return nResult;
} }
isminetype IsMine(const CKeyStore &keystore, const CTxDestination& dest) static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPubKey, SigVersion sigversion)
{
CScript script = GetScriptForDestination(dest);
return IsMine(keystore, script);
}
isminetype IsMine(const CKeyStore &keystore, const CScript& scriptPubKey)
{ {
vector<valtype> vSolutions; vector<valtype> vSolutions;
txnouttype whichType; txnouttype whichType;
@ -66,7 +60,7 @@ isminetype IsMine(const CKeyStore &keystore, const CScript& scriptPubKey)
CScriptID scriptID = CScriptID(uint160(vSolutions[0])); CScriptID scriptID = CScriptID(uint160(vSolutions[0]));
CScript subscript; CScript subscript;
if (keystore.GetCScript(scriptID, subscript)) { if (keystore.GetCScript(scriptID, subscript)) {
isminetype ret = IsMine(keystore, subscript); isminetype ret = IsMineInner(keystore, subscript, SigVersion::SIGVERSION_SPROUT);
if (ret == ISMINE_SPENDABLE) if (ret == ISMINE_SPENDABLE)
return ret; return ret;
} }
@ -94,3 +88,14 @@ isminetype IsMine(const CKeyStore &keystore, const CScript& scriptPubKey)
} }
return ISMINE_NO; return ISMINE_NO;
} }
isminetype IsMine(const CKeyStore& keystore, const CScript& scriptPubKey)
{
return IsMineInner(keystore, scriptPubKey, SigVersion::SIGVERSION_SPROUT);
}
isminetype IsMine(const CKeyStore& keystore, const CTxDestination& dest)
{
CScript script = GetScriptForDestination(dest);
return IsMine(keystore, script);
}