Skip to content

Commit e61de63

Browse files
committed
Change ismine to take a CWallet instead of CKeyStore
1 parent 7c611e2 commit e61de63

File tree

4 files changed

+51
-30
lines changed

4 files changed

+51
-30
lines changed

src/wallet/ismine.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66
#include <wallet/ismine.h>
77

88
#include <key.h>
9-
#include <keystore.h>
109
#include <script/script.h>
1110
#include <script/sign.h>
12-
11+
#include <wallet/wallet.h>
1312

1413
typedef std::vector<unsigned char> valtype;
1514

@@ -46,7 +45,7 @@ bool PermitsUncompressed(IsMineSigVersion sigversion)
4645
return sigversion == IsMineSigVersion::TOP || sigversion == IsMineSigVersion::P2SH;
4746
}
4847

49-
bool HaveKeys(const std::vector<valtype>& pubkeys, const CKeyStore& keystore)
48+
bool HaveKeys(const std::vector<valtype>& pubkeys, const CWallet& keystore)
5049
{
5150
for (const valtype& pubkey : pubkeys) {
5251
CKeyID keyID = CPubKey(pubkey).GetID();
@@ -55,7 +54,7 @@ bool HaveKeys(const std::vector<valtype>& pubkeys, const CKeyStore& keystore)
5554
return true;
5655
}
5756

58-
IsMineResult IsMineInner(const CKeyStore& keystore, const CScript& scriptPubKey, IsMineSigVersion sigversion)
57+
IsMineResult IsMineInner(const CWallet& keystore, const CScript& scriptPubKey, IsMineSigVersion sigversion)
5958
{
6059
IsMineResult ret = IsMineResult::NO;
6160

@@ -172,7 +171,7 @@ IsMineResult IsMineInner(const CKeyStore& keystore, const CScript& scriptPubKey,
172171

173172
} // namespace
174173

175-
isminetype IsMine(const CKeyStore& keystore, const CScript& scriptPubKey)
174+
isminetype IsMine(const CWallet& keystore, const CScript& scriptPubKey)
176175
{
177176
switch (IsMineInner(keystore, scriptPubKey, IsMineSigVersion::TOP)) {
178177
case IsMineResult::INVALID:
@@ -186,7 +185,7 @@ isminetype IsMine(const CKeyStore& keystore, const CScript& scriptPubKey)
186185
assert(false);
187186
}
188187

189-
isminetype IsMine(const CKeyStore& keystore, const CTxDestination& dest)
188+
isminetype IsMine(const CWallet& keystore, const CTxDestination& dest)
190189
{
191190
CScript script = GetScriptForDestination(dest);
192191
return IsMine(keystore, script);

src/wallet/ismine.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <stdint.h>
1212
#include <bitset>
1313

14-
class CKeyStore;
14+
class CWallet;
1515
class CScript;
1616

1717
/** IsMine() return codes */
@@ -28,8 +28,8 @@ enum isminetype : unsigned int
2828
/** used for bitflags of isminetype */
2929
typedef uint8_t isminefilter;
3030

31-
isminetype IsMine(const CKeyStore& keystore, const CScript& scriptPubKey);
32-
isminetype IsMine(const CKeyStore& keystore, const CTxDestination& dest);
31+
isminetype IsMine(const CWallet& wallet, const CScript& scriptPubKey);
32+
isminetype IsMine(const CWallet& wallet, const CTxDestination& dest);
3333

3434
/**
3535
* Cachable amount subdivided into watchonly and spendable parts.

src/wallet/test/ismine_tests.cpp

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
#include <key.h>
6-
#include <keystore.h>
76
#include <script/script.h>
87
#include <script/script_error.h>
98
#include <script/standard.h>
109
#include <test/setup_common.h>
1110
#include <wallet/ismine.h>
11+
#include <wallet/wallet.h>
1212

1313
#include <boost/test/unit_test.hpp>
1414

@@ -27,13 +27,15 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
2727
CKey uncompressedKey;
2828
uncompressedKey.MakeNewKey(false);
2929
CPubKey uncompressedPubkey = uncompressedKey.GetPubKey();
30+
std::unique_ptr<interfaces::Chain> chain = interfaces::MakeChain();
3031

3132
CScript scriptPubKey;
3233
isminetype result;
3334

3435
// P2PK compressed
3536
{
36-
CBasicKeyStore keystore;
37+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
38+
LOCK(keystore.cs_wallet);
3739
scriptPubKey = GetScriptForRawPubKey(pubkeys[0]);
3840

3941
// Keystore does not have key
@@ -48,7 +50,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
4850

4951
// P2PK uncompressed
5052
{
51-
CBasicKeyStore keystore;
53+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
54+
LOCK(keystore.cs_wallet);
5255
scriptPubKey = GetScriptForRawPubKey(uncompressedPubkey);
5356

5457
// Keystore does not have key
@@ -63,7 +66,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
6366

6467
// P2PKH compressed
6568
{
66-
CBasicKeyStore keystore;
69+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
70+
LOCK(keystore.cs_wallet);
6771
scriptPubKey = GetScriptForDestination(PKHash(pubkeys[0]));
6872

6973
// Keystore does not have key
@@ -78,7 +82,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
7882

7983
// P2PKH uncompressed
8084
{
81-
CBasicKeyStore keystore;
85+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
86+
LOCK(keystore.cs_wallet);
8287
scriptPubKey = GetScriptForDestination(PKHash(uncompressedPubkey));
8388

8489
// Keystore does not have key
@@ -93,7 +98,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
9398

9499
// P2SH
95100
{
96-
CBasicKeyStore keystore;
101+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
102+
LOCK(keystore.cs_wallet);
97103

98104
CScript redeemScript = GetScriptForDestination(PKHash(pubkeys[0]));
99105
scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));
@@ -115,7 +121,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
115121

116122
// (P2PKH inside) P2SH inside P2SH (invalid)
117123
{
118-
CBasicKeyStore keystore;
124+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
125+
LOCK(keystore.cs_wallet);
119126

120127
CScript redeemscript_inner = GetScriptForDestination(PKHash(pubkeys[0]));
121128
CScript redeemscript = GetScriptForDestination(ScriptHash(redeemscript_inner));
@@ -131,7 +138,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
131138

132139
// (P2PKH inside) P2SH inside P2WSH (invalid)
133140
{
134-
CBasicKeyStore keystore;
141+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
142+
LOCK(keystore.cs_wallet);
135143

136144
CScript redeemscript = GetScriptForDestination(PKHash(pubkeys[0]));
137145
CScript witnessscript = GetScriptForDestination(ScriptHash(redeemscript));
@@ -147,7 +155,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
147155

148156
// P2WPKH inside P2WSH (invalid)
149157
{
150-
CBasicKeyStore keystore;
158+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
159+
LOCK(keystore.cs_wallet);
151160

152161
CScript witnessscript = GetScriptForDestination(WitnessV0KeyHash(PKHash(pubkeys[0])));
153162
scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(witnessscript));
@@ -161,7 +170,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
161170

162171
// (P2PKH inside) P2WSH inside P2WSH (invalid)
163172
{
164-
CBasicKeyStore keystore;
173+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
174+
LOCK(keystore.cs_wallet);
165175

166176
CScript witnessscript_inner = GetScriptForDestination(PKHash(pubkeys[0]));
167177
CScript witnessscript = GetScriptForDestination(WitnessV0ScriptHash(witnessscript_inner));
@@ -177,7 +187,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
177187

178188
// P2WPKH compressed
179189
{
180-
CBasicKeyStore keystore;
190+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
191+
LOCK(keystore.cs_wallet);
181192
BOOST_CHECK(keystore.AddKey(keys[0]));
182193

183194
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(PKHash(pubkeys[0])));
@@ -190,7 +201,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
190201

191202
// P2WPKH uncompressed
192203
{
193-
CBasicKeyStore keystore;
204+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
205+
LOCK(keystore.cs_wallet);
194206
BOOST_CHECK(keystore.AddKey(uncompressedKey));
195207

196208
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(PKHash(uncompressedPubkey)));
@@ -207,7 +219,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
207219

208220
// scriptPubKey multisig
209221
{
210-
CBasicKeyStore keystore;
222+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
223+
LOCK(keystore.cs_wallet);
211224

212225
scriptPubKey = GetScriptForMultisig(2, {uncompressedPubkey, pubkeys[1]});
213226

@@ -236,7 +249,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
236249

237250
// P2SH multisig
238251
{
239-
CBasicKeyStore keystore;
252+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
253+
LOCK(keystore.cs_wallet);
240254
BOOST_CHECK(keystore.AddKey(uncompressedKey));
241255
BOOST_CHECK(keystore.AddKey(keys[1]));
242256

@@ -255,7 +269,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
255269

256270
// P2WSH multisig with compressed keys
257271
{
258-
CBasicKeyStore keystore;
272+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
273+
LOCK(keystore.cs_wallet);
259274
BOOST_CHECK(keystore.AddKey(keys[0]));
260275
BOOST_CHECK(keystore.AddKey(keys[1]));
261276

@@ -279,7 +294,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
279294

280295
// P2WSH multisig with uncompressed key
281296
{
282-
CBasicKeyStore keystore;
297+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
298+
LOCK(keystore.cs_wallet);
283299
BOOST_CHECK(keystore.AddKey(uncompressedKey));
284300
BOOST_CHECK(keystore.AddKey(keys[1]));
285301

@@ -303,7 +319,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
303319

304320
// P2WSH multisig wrapped in P2SH
305321
{
306-
CBasicKeyStore keystore;
322+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
323+
LOCK(keystore.cs_wallet);
307324

308325
CScript witnessScript = GetScriptForMultisig(2, {pubkeys[0], pubkeys[1]});
309326
CScript redeemScript = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));
@@ -328,7 +345,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
328345

329346
// OP_RETURN
330347
{
331-
CBasicKeyStore keystore;
348+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
349+
LOCK(keystore.cs_wallet);
332350
BOOST_CHECK(keystore.AddKey(keys[0]));
333351

334352
scriptPubKey.clear();
@@ -340,7 +358,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
340358

341359
// witness unspendable
342360
{
343-
CBasicKeyStore keystore;
361+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
362+
LOCK(keystore.cs_wallet);
344363
BOOST_CHECK(keystore.AddKey(keys[0]));
345364

346365
scriptPubKey.clear();
@@ -352,7 +371,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
352371

353372
// witness unknown
354373
{
355-
CBasicKeyStore keystore;
374+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
375+
LOCK(keystore.cs_wallet);
356376
BOOST_CHECK(keystore.AddKey(keys[0]));
357377

358378
scriptPubKey.clear();
@@ -364,7 +384,8 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
364384

365385
// Nonstandard
366386
{
367-
CBasicKeyStore keystore;
387+
CWallet keystore(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
388+
LOCK(keystore.cs_wallet);
368389
BOOST_CHECK(keystore.AddKey(keys[0]));
369390

370391
scriptPubKey.clear();

test/lint/lint-circular-dependencies.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ EXPECTED_CIRCULAR_DEPENDENCIES=(
3030
"policy/fees -> txmempool -> validation -> policy/fees"
3131
"qt/guiutil -> qt/walletmodel -> qt/optionsmodel -> qt/guiutil"
3232
"txmempool -> validation -> validationinterface -> txmempool"
33+
"wallet/ismine -> wallet/wallet -> wallet/ismine"
3334
)
3435

3536
EXIT_CODE=0

0 commit comments

Comments
 (0)