Merge bitcoin/bitcoin#22781: wallet: fix the behavior of IsHDEnabled, return false in case of a blank hd wallet.

8733a8e84c4b2e484f6ed6159fcf5f29a360d42e the result of CWallet::IsHDEnabled() was initialized with true. (Saibato)

Pull request description:

  the result of CWallet::IsHDEnabled() was initialized with true.

  But in case of no keys or a blank hd wallet the iterator would be skipped
  and not set to false but true, since the loop would be not entered.

  That had resulted in a wrong return and subsequent false HD and watch-only
  icon display in GUi when reloading a wallet after closing.

ACKs for top commit:
  achow101:
    ACK 8733a8e84c4b2e484f6ed6159fcf5f29a360d42e
  hebasto:
    ACK 8733a8e84c4b2e484f6ed6159fcf5f29a360d42e
  theStack:
    utACK 8733a8e84c4b2e484f6ed6159fcf5f29a360d42e
  meshcollider:
    utACK 8733a8e84c4b2e484f6ed6159fcf5f29a360d42e

Tree-SHA512: 79b976594f7174d05c29fe3819037ead59aaef27498d95415ceba74d633a8e035f6b03b521000ac3370684a8cb09319d8be1a443ce2d29b3ff4089e399f6b719
This commit is contained in:
Samuel Dobson 2021-08-22 12:48:12 +12:00 committed by pasta
parent 0505229c89
commit a9b1575fe8
No known key found for this signature in database
GPG Key ID: 52527BEDABE87984

View File

@ -1617,9 +1617,10 @@ CAmount CWallet::GetChange(const CTransaction& tx) const
bool CWallet::IsHDEnabled() const bool CWallet::IsHDEnabled() const
{ {
// All Active ScriptPubKeyMans must be HD for this to be true // All Active ScriptPubKeyMans must be HD for this to be true
bool result = true; bool result = false;
for (const auto& spk_man : GetActiveScriptPubKeyMans()) { for (const auto& spk_man : GetActiveScriptPubKeyMans()) {
result &= spk_man->IsHDEnabled(); if (!spk_man->IsHDEnabled()) return false;
result = true;
} }
return result; return result;
} }