PRCYCoin  2.0.0.7rc1
P2P Digital Currency
keystore.cpp
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2014 The Bitcoin developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #include "keystore.h"
7 
8 #include "key.h"
9 #include "script/script.h"
10 #include "script/standard.h"
11 #include "util.h"
12 
13 bool CKeyStore::GetPubKey(const CKeyID& address, CPubKey& vchPubKeyOut) const
14 {
15  CKey key;
16  if (!GetKey(address, key))
17  return false;
18  vchPubKeyOut = key.GetPubKey();
19  return true;
20 }
21 
23 {
24  return AddKeyPubKey(key, key.GetPubKey());
25 }
26 
27 bool CBasicKeyStore::AddKeyPubKey(const CKey& key, const CPubKey& pubkey)
28 {
30  mapKeys[pubkey.GetID()] = key;
31  return true;
32 }
33 
34 bool CBasicKeyStore::AddCScript(const CScript& redeemScript)
35 {
36  if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE)
37  return error("CBasicKeyStore::AddCScript() : redeemScripts > %i bytes are invalid", MAX_SCRIPT_ELEMENT_SIZE);
38 
40  mapScripts[CScriptID(redeemScript)] = redeemScript;
41  return true;
42 }
43 
44 bool CBasicKeyStore::HaveCScript(const CScriptID& hash) const
45 {
47  return mapScripts.count(hash) > 0;
48 }
49 
50 bool CBasicKeyStore::GetCScript(const CScriptID& hash, CScript& redeemScriptOut) const
51 {
53  ScriptMap::const_iterator mi = mapScripts.find(hash);
54  if (mi != mapScripts.end()) {
55  redeemScriptOut = (*mi).second;
56  return true;
57  }
58  return false;
59 }
60 
62 {
64  setWatchOnly.insert(dest);
65  return true;
66 }
67 
69 {
71  setWatchOnly.erase(dest);
72  return true;
73 }
74 
75 bool CBasicKeyStore::HaveWatchOnly(const CScript& dest) const
76 {
78  return setWatchOnly.count(dest) > 0;
79 }
80 
82 {
84  return (!setWatchOnly.empty());
85 }
CKeyStore::AddKeyPubKey
virtual bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey)=0
Add a key to the store.
CKeyStore::GetPubKey
virtual bool GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const
Definition: keystore.cpp:13
CKeyID
A reference to a CKey: the Hash160 of its serialized public key.
Definition: pubkey.h:29
CKeyStore::cs_KeyStore
RecursiveMutex cs_KeyStore
Definition: keystore.h:24
CBasicKeyStore::RemoveWatchOnly
virtual bool RemoveWatchOnly(const CScript &dest)
Definition: keystore.cpp:68
CBasicKeyStore::setWatchOnly
WatchOnlySet setWatchOnly
Definition: keystore.h:62
CBasicKeyStore::AddKeyPubKey
bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey)
Add a key to the store.
Definition: keystore.cpp:27
standard.h
CBasicKeyStore::AddCScript
virtual bool AddCScript(const CScript &redeemScript)
Support for BIP 0013 : see https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki.
Definition: keystore.cpp:34
keystore.h
CKey::GetPubKey
CPubKey GetPubKey() const
Compute the public key from a private key.
Definition: key.cpp:79
CScript
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:363
CBasicKeyStore::GetCScript
virtual bool GetCScript(const CScriptID &hash, CScript &redeemScriptOut) const
Definition: keystore.cpp:50
key.h
CKeyStore::GetKey
virtual bool GetKey(const CKeyID &address, CKey &keyOut) const =0
CPubKey
An encapsulated public key.
Definition: pubkey.h:37
CKey
An encapsulated private key.
Definition: key.h:39
CKeyStore::AddKey
virtual bool AddKey(const CKey &key)
Definition: keystore.cpp:22
LOCK
#define LOCK(cs)
Definition: sync.h:182
CBasicKeyStore::mapScripts
ScriptMap mapScripts
Definition: keystore.h:61
key
CKey key
Definition: bip38tooldialog.cpp:173
CBasicKeyStore::AddWatchOnly
virtual bool AddWatchOnly(const CScript &dest)
Support for Watch-only addresses.
Definition: keystore.cpp:61
prevector::size
size_type size() const
Definition: prevector.h:282
script.h
CBasicKeyStore::HaveCScript
virtual bool HaveCScript(const CScriptID &hash) const
Definition: keystore.cpp:44
CBasicKeyStore::mapKeys
KeyMap mapKeys
Definition: keystore.h:60
CBasicKeyStore::HaveWatchOnly
virtual bool HaveWatchOnly() const
Definition: keystore.cpp:81
CScriptID
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: standard.h:20
util.h
error
bool error(const char *fmt, const Args &... args)
Definition: util.h:61
CPubKey::GetID
CKeyID GetID() const
Get the KeyID of this public key (hash of its serialization)
Definition: pubkey.h:143