Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/wallet.cpp
Show First 20 Lines • Show All 3,287 Lines • ▼ Show 20 Lines | bool CWallet::TopUpKeyPool(unsigned int kpSize) { | ||||
if (!IsHDEnabled() || !CanSupportFeature(FEATURE_HD_SPLIT)) { | if (!IsHDEnabled() || !CanSupportFeature(FEATURE_HD_SPLIT)) { | ||||
// don't create extra internal keys | // don't create extra internal keys | ||||
missingInternal = 0; | missingInternal = 0; | ||||
} | } | ||||
bool internal = false; | bool internal = false; | ||||
CWalletDB walletdb(*dbw); | CWalletDB walletdb(*dbw); | ||||
for (int64_t i = missingInternal + missingExternal; i--;) { | for (int64_t i = missingInternal + missingExternal; i--;) { | ||||
int64_t nEnd = 1; | |||||
if (i < missingInternal) { | if (i < missingInternal) { | ||||
internal = true; | internal = true; | ||||
} | } | ||||
if (!setInternalKeyPool.empty()) { | // How in the hell did you use so many keys? | ||||
nEnd = *(setInternalKeyPool.rbegin()) + 1; | assert(m_max_keypool_index < std::numeric_limits<int64_t>::max()); | ||||
} | int64_t index = ++m_max_keypool_index; | ||||
if (!setExternalKeyPool.empty()) { | |||||
nEnd = std::max(nEnd, *(setExternalKeyPool.rbegin()) + 1); | |||||
} | |||||
if (!walletdb.WritePool( | if (!walletdb.WritePool( | ||||
nEnd, CKeyPool(GenerateNewKey(walletdb, internal), internal))) { | index, | ||||
CKeyPool(GenerateNewKey(walletdb, internal), internal))) { | |||||
throw std::runtime_error(std::string(__func__) + | throw std::runtime_error(std::string(__func__) + | ||||
": writing generated key failed"); | ": writing generated key failed"); | ||||
} | } | ||||
if (internal) { | if (internal) { | ||||
setInternalKeyPool.insert(nEnd); | setInternalKeyPool.insert(index); | ||||
} else { | } else { | ||||
setExternalKeyPool.insert(nEnd); | setExternalKeyPool.insert(index); | ||||
} | } | ||||
} | } | ||||
if (missingInternal + missingExternal > 0) { | if (missingInternal + missingExternal > 0) { | ||||
LogPrintf( | LogPrintf( | ||||
"keypool added %d keys (%d internal), size=%u (%u internal)\n", | "keypool added %d keys (%d internal), size=%u (%u internal)\n", | ||||
missingInternal + missingExternal, missingInternal, | missingInternal + missingExternal, missingInternal, | ||||
setInternalKeyPool.size() + setExternalKeyPool.size(), | setInternalKeyPool.size() + setExternalKeyPool.size(), | ||||
setInternalKeyPool.size()); | setInternalKeyPool.size()); | ||||
▲ Show 20 Lines • Show All 1,207 Lines • Show Last 20 Lines |