mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 11:13:23 -03:00
Merge #15730: rpc: Show scanning details in getwalletinfo
b6c748f849
doc: Add release notes for 15730 (João Barbosa)d3e8458365
rpc: Show scanning details in getwalletinfo (João Barbosa)90e27abe37
wallet: Track current scanning progress (João Barbosa)2ee811e693
wallet: Track scanning duration (João Barbosa) Pull request description: Closes #15724. ACKs for commit b6c748: MarcoFalke: re-utACKb6c748f849
(Only change since my last review is rebase, adding release notes, and returning false instead of null) laanwj: utACKb6c748f849
jonatack: ACKb6c748f849
, only changes appear to be rebase for https://github.com/bitcoin/bitcoin/pull/15730#discussion_r280030617 and release notes. Tree-SHA512: 8ee98f971c15f66ce8138fc92c55e51abc9faf01866a31ac7ce2ad766aa2bb88559eabee3b5815d645c84cdf1c19dc35ec03f31461e39bc5f6040edec0b87116
This commit is contained in:
commit
c5ffe8d515
4 changed files with 26 additions and 1 deletions
5
doc/release-notes-15730.md
Normal file
5
doc/release-notes-15730.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
RPC changes
|
||||||
|
-----------
|
||||||
|
The RPC `getwalletinfo` response now includes the `scanning` key with an object
|
||||||
|
if there is a scanning in progress or `false` otherwise. Currently the object
|
||||||
|
has the scanning duration and progress.
|
|
@ -2462,6 +2462,11 @@ static UniValue getwalletinfo(const JSONRPCRequest& request)
|
||||||
" \"paytxfee\": x.xxxx, (numeric) the transaction fee configuration, set in " + CURRENCY_UNIT + "/kB\n"
|
" \"paytxfee\": x.xxxx, (numeric) the transaction fee configuration, set in " + CURRENCY_UNIT + "/kB\n"
|
||||||
" \"hdseedid\": \"<hash160>\" (string, optional) the Hash160 of the HD seed (only present when HD is enabled)\n"
|
" \"hdseedid\": \"<hash160>\" (string, optional) the Hash160 of the HD seed (only present when HD is enabled)\n"
|
||||||
" \"private_keys_enabled\": true|false (boolean) false if privatekeys are disabled for this wallet (enforced watch-only wallet)\n"
|
" \"private_keys_enabled\": true|false (boolean) false if privatekeys are disabled for this wallet (enforced watch-only wallet)\n"
|
||||||
|
" \"scanning\": (json object) current scanning details, or false if no scan is in progress\n"
|
||||||
|
" {\n"
|
||||||
|
" \"duration\" : xxxx (numeric) elapsed seconds since scan start\n"
|
||||||
|
" \"progress\" : x.xxxx, (numeric) scanning progress percentage [0.0, 1.0]\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
},
|
},
|
||||||
RPCExamples{
|
RPCExamples{
|
||||||
|
@ -2505,6 +2510,14 @@ static UniValue getwalletinfo(const JSONRPCRequest& request)
|
||||||
obj.pushKV("hdseedid", seed_id.GetHex());
|
obj.pushKV("hdseedid", seed_id.GetHex());
|
||||||
}
|
}
|
||||||
obj.pushKV("private_keys_enabled", !pwallet->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS));
|
obj.pushKV("private_keys_enabled", !pwallet->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS));
|
||||||
|
if (pwallet->IsScanning()) {
|
||||||
|
UniValue scanning(UniValue::VOBJ);
|
||||||
|
scanning.pushKV("duration", pwallet->ScanningDuration() / 1000);
|
||||||
|
scanning.pushKV("progress", pwallet->ScanningProgress());
|
||||||
|
obj.pushKV("scanning", scanning);
|
||||||
|
} else {
|
||||||
|
obj.pushKV("scanning", false);
|
||||||
|
}
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1786,8 +1786,9 @@ CWallet::ScanResult CWallet::ScanForWalletTransactions(const uint256& start_bloc
|
||||||
}
|
}
|
||||||
double progress_current = progress_begin;
|
double progress_current = progress_begin;
|
||||||
while (block_height && !fAbortRescan && !chain().shutdownRequested()) {
|
while (block_height && !fAbortRescan && !chain().shutdownRequested()) {
|
||||||
|
m_scanning_progress = (progress_current - progress_begin) / (progress_end - progress_begin);
|
||||||
if (*block_height % 100 == 0 && progress_end - progress_begin > 0.0) {
|
if (*block_height % 100 == 0 && progress_end - progress_begin > 0.0) {
|
||||||
ShowProgress(strprintf("%s " + _("Rescanning..."), GetDisplayName()), std::max(1, std::min(99, (int)((progress_current - progress_begin) / (progress_end - progress_begin) * 100))));
|
ShowProgress(strprintf("%s " + _("Rescanning..."), GetDisplayName()), std::max(1, std::min(99, (int)(m_scanning_progress * 100))));
|
||||||
}
|
}
|
||||||
if (GetTime() >= nNow + 60) {
|
if (GetTime() >= nNow + 60) {
|
||||||
nNow = GetTime();
|
nNow = GetTime();
|
||||||
|
|
|
@ -596,6 +596,8 @@ class CWallet final : public CCryptoKeyStore, private interfaces::Chain::Notific
|
||||||
private:
|
private:
|
||||||
std::atomic<bool> fAbortRescan{false};
|
std::atomic<bool> fAbortRescan{false};
|
||||||
std::atomic<bool> fScanningWallet{false}; // controlled by WalletRescanReserver
|
std::atomic<bool> fScanningWallet{false}; // controlled by WalletRescanReserver
|
||||||
|
std::atomic<int64_t> m_scanning_start{0};
|
||||||
|
std::atomic<double> m_scanning_progress{0};
|
||||||
std::mutex mutexScanning;
|
std::mutex mutexScanning;
|
||||||
friend class WalletRescanReserver;
|
friend class WalletRescanReserver;
|
||||||
|
|
||||||
|
@ -820,6 +822,8 @@ public:
|
||||||
void AbortRescan() { fAbortRescan = true; }
|
void AbortRescan() { fAbortRescan = true; }
|
||||||
bool IsAbortingRescan() { return fAbortRescan; }
|
bool IsAbortingRescan() { return fAbortRescan; }
|
||||||
bool IsScanning() { return fScanningWallet; }
|
bool IsScanning() { return fScanningWallet; }
|
||||||
|
int64_t ScanningDuration() const { return fScanningWallet ? GetTimeMillis() - m_scanning_start : 0; }
|
||||||
|
double ScanningProgress() const { return fScanningWallet ? (double) m_scanning_progress : 0; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* keystore implementation
|
* keystore implementation
|
||||||
|
@ -1241,6 +1245,8 @@ public:
|
||||||
if (m_wallet->fScanningWallet) {
|
if (m_wallet->fScanningWallet) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_wallet->m_scanning_start = GetTimeMillis();
|
||||||
|
m_wallet->m_scanning_progress = 0;
|
||||||
m_wallet->fScanningWallet = true;
|
m_wallet->fScanningWallet = true;
|
||||||
m_could_reserve = true;
|
m_could_reserve = true;
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue