mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
feat(wallet): TopUpKeyPool improvements (#5456)
## Issue being fixed or feature implemented - make progress calculations sane - show progress in GUI but only when you need 100+ new keys - make it stop on shutdown request - spam less in debug.log ## What was done? ## How Has This Been Tested? run tests, run `keypoolrefill` with `1100` (add 100 keys, no gui popup) and `10000` (100+ keys, progress bar) on testnet wallet, check logs, verify it can be interrupted on shutdown ## Breaking Changes n/a ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_
This commit is contained in:
parent
a65b1fb0f6
commit
bfa585d54a
@ -7,6 +7,7 @@
|
|||||||
#include <logging.h>
|
#include <logging.h>
|
||||||
#include <script/descriptor.h>
|
#include <script/descriptor.h>
|
||||||
#include <script/sign.h>
|
#include <script/sign.h>
|
||||||
|
#include <shutdown.h>
|
||||||
#include <ui_interface.h>
|
#include <ui_interface.h>
|
||||||
#include <util/bip32.h>
|
#include <util/bip32.h>
|
||||||
#include <util/strencodings.h>
|
#include <util/strencodings.h>
|
||||||
@ -1414,14 +1415,27 @@ bool LegacyScriptPubKeyMan::TopUpInner(unsigned int kpSize)
|
|||||||
{
|
{
|
||||||
// don't create extra internal keys
|
// don't create extra internal keys
|
||||||
missingInternal = 0;
|
missingInternal = 0;
|
||||||
} else {
|
|
||||||
nTargetSize *= 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int64_t total_missing = missingInternal + missingExternal;
|
||||||
|
if (total_missing == 0) return true;
|
||||||
|
|
||||||
|
constexpr int64_t PROGRESS_REPORT_INTERVAL = 1; // in seconds
|
||||||
|
const bool should_show_progress = total_missing > 100;
|
||||||
|
const std::string strMsg = _("Topping up keypool...").translated;
|
||||||
|
|
||||||
|
int64_t progress_report_time = GetTime();
|
||||||
|
WalletLogPrintf("%s\n", strMsg);
|
||||||
|
if (should_show_progress) {
|
||||||
|
uiInterface.ShowProgress(strMsg, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
bool fInternal = false;
|
bool fInternal = false;
|
||||||
|
int64_t current_index{0};
|
||||||
WalletBatch batch(m_storage.GetDatabase());
|
WalletBatch batch(m_storage.GetDatabase());
|
||||||
for (int64_t i = missingInternal + missingExternal; i--;)
|
|
||||||
{
|
for (current_index = 0; current_index < total_missing; ++current_index) {
|
||||||
if (i < missingInternal) {
|
if (current_index == missingExternal) {
|
||||||
fInternal = true;
|
fInternal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1429,15 +1443,20 @@ bool LegacyScriptPubKeyMan::TopUpInner(unsigned int kpSize)
|
|||||||
CPubKey pubkey(GenerateNewKey(batch, 0, fInternal));
|
CPubKey pubkey(GenerateNewKey(batch, 0, fInternal));
|
||||||
AddKeypoolPubkeyWithDB(pubkey, fInternal, batch);
|
AddKeypoolPubkeyWithDB(pubkey, fInternal, batch);
|
||||||
|
|
||||||
if (missingInternal + missingExternal > 0) {
|
if (GetTime() >= progress_report_time + PROGRESS_REPORT_INTERVAL) {
|
||||||
WalletLogPrintf("keypool added %d keys (%d internal), size=%u (%u internal)\n",
|
const double dProgress = 100.f * current_index / total_missing;
|
||||||
missingInternal + missingExternal, missingInternal,
|
progress_report_time = GetTime();
|
||||||
setInternalKeyPool.size() + setExternalKeyPool.size(), setInternalKeyPool.size());
|
WalletLogPrintf("Still topping up. At key %lld. Progress=%f\n", current_index, dProgress);
|
||||||
|
if (should_show_progress) {
|
||||||
|
uiInterface.ShowProgress(strMsg, static_cast<int>(dProgress), false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (ShutdownRequested()) break;
|
||||||
double dProgress = 100.f * m_max_keypool_index / (nTargetSize + 1);
|
}
|
||||||
std::string strMsg = strprintf(_("Loading wallet... (%3.2f %%)").translated, dProgress);
|
WalletLogPrintf("Keypool added %d keys, size=%u (%u internal)\n",
|
||||||
uiInterface.InitMessage(strMsg);
|
current_index + 1, setInternalKeyPool.size() + setExternalKeyPool.size(), setInternalKeyPool.size());
|
||||||
|
if (should_show_progress) {
|
||||||
|
uiInterface.ShowProgress("", 100, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NotifyCanGetAddressesChanged();
|
NotifyCanGetAddressesChanged();
|
||||||
|
Loading…
Reference in New Issue
Block a user