aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/wallet.h
diff options
context:
space:
mode:
authorMatt Corallo <git@bluematt.me>2017-07-11 12:15:02 -0400
committerMatt Corallo <git@bluematt.me>2017-07-17 12:12:48 -0400
commit1fc8c3de0cff2971cc1f9903bfc3d03a982f2fab (patch)
tree90ef1ee9bbdcc8f90231635a71b63b9234e2a7d7 /src/wallet/wallet.h
parent0b019357ff09e7a522307fc271d6b60562a7b890 (diff)
No longer ever reuse keypool indexes
This fixes an issue where you could reserve a keypool entry, then top up the keypool, writing out a new key at the given index, then return they key from the pool. This isnt likely to cause issues, but given there is no reason to ever re-use keypool indexes (they're 64 bits...), best to avoid it alltogether.
Diffstat (limited to 'src/wallet/wallet.h')
-rw-r--r--src/wallet/wallet.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h
index 06937566b0..574fd8710d 100644
--- a/src/wallet/wallet.h
+++ b/src/wallet/wallet.h
@@ -701,6 +701,7 @@ private:
std::set<int64_t> setInternalKeyPool;
std::set<int64_t> setExternalKeyPool;
+ int64_t m_max_keypool_index;
int64_t nTimeFirstKey;
@@ -743,13 +744,14 @@ public:
}
}
- void LoadKeyPool(int nIndex, const CKeyPool &keypool)
+ void LoadKeyPool(int64_t nIndex, const CKeyPool &keypool)
{
if (keypool.fInternal) {
setInternalKeyPool.insert(nIndex);
} else {
setExternalKeyPool.insert(nIndex);
}
+ m_max_keypool_index = std::max(m_max_keypool_index, nIndex);
// If no metadata exists yet, create a default with the pool key's
// creation time. Note that this may be overwritten by actually
@@ -795,6 +797,7 @@ public:
nAccountingEntryNumber = 0;
nNextResend = 0;
nLastResend = 0;
+ m_max_keypool_index = 0;
nTimeFirstKey = 0;
fBroadcastTransactions = false;
nRelockTime = 0;