aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarko Bencun <marko.bencun@monetas.net>2017-07-23 23:32:57 +0200
committerMarko Bencun <marko.bencun@monetas.net>2017-07-23 23:38:52 +0200
commit5cb3da04b8882ca975b4e3d6c089c64bbaf67d0d (patch)
tree0f2c1118633a04ea7920cf6f0a523cb113a4b281 /src
parent0c173a15ca1bf20999f74987988985508c9de463 (diff)
downloadbitcoin-5cb3da04b8882ca975b4e3d6c089c64bbaf67d0d.tar.xz
keystore GetKeys(): return result instead of writing to reference
Issue: #10905 By returning the result, a few useless lines can be removed. Return-value-optimization means there should be no copy.
Diffstat (limited to 'src')
-rw-r--r--src/keystore.h18
-rw-r--r--src/wallet/crypter.h25
-rw-r--r--src/wallet/wallet.cpp5
3 files changed, 19 insertions, 29 deletions
diff --git a/src/keystore.h b/src/keystore.h
index 965ae0c79a..059a657dc2 100644
--- a/src/keystore.h
+++ b/src/keystore.h
@@ -30,7 +30,7 @@ public:
//! Check whether a key corresponding to a given address is present in the store.
virtual bool HaveKey(const CKeyID &address) const =0;
virtual bool GetKey(const CKeyID &address, CKey& keyOut) const =0;
- virtual void GetKeys(std::set<CKeyID> &setAddress) const =0;
+ virtual std::set<CKeyID> GetKeys() const =0;
virtual bool GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const =0;
//! Support for BIP 0013 : see https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki
@@ -71,18 +71,14 @@ public:
}
return result;
}
- void GetKeys(std::set<CKeyID> &setAddress) const override
+ std::set<CKeyID> GetKeys() const override
{
- setAddress.clear();
- {
- LOCK(cs_KeyStore);
- KeyMap::const_iterator mi = mapKeys.begin();
- while (mi != mapKeys.end())
- {
- setAddress.insert((*mi).first);
- mi++;
- }
+ LOCK(cs_KeyStore);
+ std::set<CKeyID> set_address;
+ for (const auto& mi : mapKeys) {
+ set_address.insert(mi.first);
}
+ return set_address;
}
bool GetKey(const CKeyID &address, CKey &keyOut) const override
{
diff --git a/src/wallet/crypter.h b/src/wallet/crypter.h
index 1dc44e424f..d6f3e27721 100644
--- a/src/wallet/crypter.h
+++ b/src/wallet/crypter.h
@@ -16,13 +16,13 @@ const unsigned int WALLET_CRYPTO_IV_SIZE = 16;
/**
* Private key encryption is done based on a CMasterKey,
* which holds a salt and random encryption key.
- *
+ *
* CMasterKeys are encrypted using AES-256-CBC using a key
* derived using derivation method nDerivationMethod
* (0 == EVP_sha512()) and derivation iterations nDeriveIterations.
* vchOtherDerivationParameters is provided for alternative algorithms
* which may require more parameters (such as scrypt).
- *
+ *
* Wallet Private Keys are then encrypted using AES-256-CBC
* with the double-sha256 of the public key as the IV, and the
* master key's key as the encryption key (see keystore.[ch]).
@@ -162,28 +162,25 @@ public:
{
{
LOCK(cs_KeyStore);
- if (!IsCrypted())
+ if (!IsCrypted()) {
return CBasicKeyStore::HaveKey(address);
+ }
return mapCryptedKeys.count(address) > 0;
}
return false;
}
bool GetKey(const CKeyID &address, CKey& keyOut) const override;
bool GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const override;
- void GetKeys(std::set<CKeyID> &setAddress) const override
+ std::set<CKeyID> GetKeys() const override
{
- if (!IsCrypted())
- {
- CBasicKeyStore::GetKeys(setAddress);
- return;
+ if (!IsCrypted()) {
+ return CBasicKeyStore::GetKeys();
}
- setAddress.clear();
- CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin();
- while (mi != mapCryptedKeys.end())
- {
- setAddress.insert((*mi).first);
- mi++;
+ std::set<CKeyID> set_address;
+ for (const auto& mi : mapCryptedKeys) {
+ set_address.insert(mi.first);
}
+ return set_address;
}
/**
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index 223790aa40..fcb679e754 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -3660,13 +3660,10 @@ void CWallet::GetKeyBirthTimes(std::map<CTxDestination, int64_t> &mapKeyBirth) c
// map in which we'll infer heights of other keys
CBlockIndex *pindexMax = chainActive[std::max(0, chainActive.Height() - 144)]; // the tip can be reorganized; use a 144-block safety margin
std::map<CKeyID, CBlockIndex*> mapKeyFirstBlock;
- std::set<CKeyID> setKeys;
- GetKeys(setKeys);
- for (const CKeyID &keyid : setKeys) {
+ for (const CKeyID &keyid : GetKeys()) {
if (mapKeyBirth.count(keyid) == 0)
mapKeyFirstBlock[keyid] = pindexMax;
}
- setKeys.clear();
// if there are no such keys, we're done
if (mapKeyFirstBlock.empty())