message: wallet: load flags before everything else
diff: @@ -551,13 +551,6 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue,
  CHDChain chain;
  ssValue >> chain;
  pwallet->GetOrCreateLegacyScriptPubKeyMan()->LoadHDChain(chain);
  - } else if (strType == DBKeys::FLAGS) {
  - uint64_t flags;
  - ssValue >> flags;
  - if (!pwallet->LoadWalletFlags(flags)) {
  - strErr = "Error reading wallet database: Unknown non-tolerable wallet flags found";
  - return false;
  - }
  } else if (strType == DBKeys::OLD_KEY) {
  strErr = "Found unsupported 'wkey' record, try loading with version 0.18";
  return false;
  @@ -662,7 +655,8 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue,
  wss.fIsEncrypted = true;
  } else if (strType != DBKeys::BESTBLOCK && strType != DBKeys::BESTBLOCK_NOMERKLE &&
  strType != DBKeys::MINVERSION && strType != DBKeys::ACENTRY &&
  - strType != DBKeys::VERSION && strType != DBKeys::SETTINGS) {
  + strType != DBKeys::VERSION && strType != DBKeys::SETTINGS &&
  + strType != DBKeys::FLAGS) {
  wss.m_unknown_records++;
  }
  } catch (const std::exception& e) {
  @@ -707,6 +701,16 @@ DBErrors WalletBatch::LoadWallet(CWallet* pwallet)
  pwallet->LoadMinVersion(nMinVersion);
  }
  + // Load wallet flags, so they are known when processing other records.
  + // The FLAGS key is absent during wallet creation.
  + uint64_t flags;
  + if (m_batch->Read(DBKeys::FLAGS, flags)) {
  + if (!pwallet->LoadWalletFlags(flags)) {
  + pwallet->WalletLogPrintf("Error reading wallet database: Unknown non-tolerable wallet flags found\n");
  + return DBErrors::CORRUPT;
  + }
  + }
  +
  // Get cursor
  if (!m_batch->StartCursor())
  {
  