Skip to content

Commit ac6ec62

Browse files
committed
Switch to a private version of SigVersion inside IsMine
This will allow us to have the consensus code and IsMine code diverge.
1 parent 19fc973 commit ac6ec62

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/script/ismine.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@
1313

1414
typedef std::vector<unsigned char> valtype;
1515

16+
enum class IsMineSigVersion
17+
{
18+
BASE = 0,
19+
WITNESS_V0 = 1
20+
};
21+
1622
static bool HaveKeys(const std::vector<valtype>& pubkeys, const CKeyStore& keystore)
1723
{
1824
for (const valtype& pubkey : pubkeys) {
@@ -22,7 +28,7 @@ static bool HaveKeys(const std::vector<valtype>& pubkeys, const CKeyStore& keyst
2228
return true;
2329
}
2430

25-
static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPubKey, bool& isInvalid, SigVersion sigversion)
31+
static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPubKey, bool& isInvalid, IsMineSigVersion sigversion)
2632
{
2733
isInvalid = false;
2834

@@ -43,7 +49,7 @@ static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPu
4349
break;
4450
case TX_PUBKEY:
4551
keyID = CPubKey(vSolutions[0]).GetID();
46-
if (sigversion != SigVersion::BASE && vSolutions[0].size() != 33) {
52+
if (sigversion != IsMineSigVersion::BASE && vSolutions[0].size() != 33) {
4753
isInvalid = true;
4854
return ISMINE_NO;
4955
}
@@ -58,14 +64,14 @@ static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPu
5864
// This also applies to the P2WSH case.
5965
break;
6066
}
61-
isminetype ret = IsMineInner(keystore, GetScriptForDestination(CKeyID(uint160(vSolutions[0]))), isInvalid, SigVersion::WITNESS_V0);
67+
isminetype ret = IsMineInner(keystore, GetScriptForDestination(CKeyID(uint160(vSolutions[0]))), isInvalid, IsMineSigVersion::WITNESS_V0);
6268
if (ret == ISMINE_SPENDABLE || ret == ISMINE_WATCH_SOLVABLE || (ret == ISMINE_NO && isInvalid))
6369
return ret;
6470
break;
6571
}
6672
case TX_PUBKEYHASH:
6773
keyID = CKeyID(uint160(vSolutions[0]));
68-
if (sigversion != SigVersion::BASE) {
74+
if (sigversion != IsMineSigVersion::BASE) {
6975
CPubKey pubkey;
7076
if (keystore.GetPubKey(keyID, pubkey) && !pubkey.IsCompressed()) {
7177
isInvalid = true;
@@ -80,7 +86,7 @@ static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPu
8086
CScriptID scriptID = CScriptID(uint160(vSolutions[0]));
8187
CScript subscript;
8288
if (keystore.GetCScript(scriptID, subscript)) {
83-
isminetype ret = IsMineInner(keystore, subscript, isInvalid, SigVersion::BASE);
89+
isminetype ret = IsMineInner(keystore, subscript, isInvalid, IsMineSigVersion::BASE);
8490
if (ret == ISMINE_SPENDABLE || ret == ISMINE_WATCH_SOLVABLE || (ret == ISMINE_NO && isInvalid))
8591
return ret;
8692
}
@@ -96,7 +102,7 @@ static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPu
96102
CScriptID scriptID = CScriptID(hash);
97103
CScript subscript;
98104
if (keystore.GetCScript(scriptID, subscript)) {
99-
isminetype ret = IsMineInner(keystore, subscript, isInvalid, SigVersion::WITNESS_V0);
105+
isminetype ret = IsMineInner(keystore, subscript, isInvalid, IsMineSigVersion::WITNESS_V0);
100106
if (ret == ISMINE_SPENDABLE || ret == ISMINE_WATCH_SOLVABLE || (ret == ISMINE_NO && isInvalid))
101107
return ret;
102108
}
@@ -111,7 +117,7 @@ static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPu
111117
// them) enable spend-out-from-under-you attacks, especially
112118
// in shared-wallet situations.
113119
std::vector<valtype> keys(vSolutions.begin()+1, vSolutions.begin()+vSolutions.size()-1);
114-
if (sigversion != SigVersion::BASE) {
120+
if (sigversion != IsMineSigVersion::BASE) {
115121
for (size_t i = 0; i < keys.size(); i++) {
116122
if (keys[i].size() != 33) {
117123
isInvalid = true;
@@ -135,7 +141,7 @@ static isminetype IsMineInner(const CKeyStore& keystore, const CScript& scriptPu
135141

136142
isminetype IsMine(const CKeyStore& keystore, const CScript& scriptPubKey, bool& isInvalid)
137143
{
138-
return IsMineInner(keystore, scriptPubKey, isInvalid, SigVersion::BASE);
144+
return IsMineInner(keystore, scriptPubKey, isInvalid, IsMineSigVersion::BASE);
139145
}
140146

141147
isminetype IsMine(const CKeyStore& keystore, const CScript& scriptPubKey)

0 commit comments

Comments
 (0)