/ src / wallet / walletutil.cpp
walletutil.cpp
 1  // Copyright (c) 2017-2022 The Bitcoin Core developers
 2  // Distributed under the MIT software license, see the accompanying
 3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
 4  
 5  #include <wallet/walletutil.h>
 6  
 7  #include <common/args.h>
 8  #include <logging.h>
 9  
10  namespace wallet {
11  fs::path GetWalletDir()
12  {
13      fs::path path;
14  
15      if (gArgs.IsArgSet("-walletdir")) {
16          path = gArgs.GetPathArg("-walletdir");
17          if (!fs::is_directory(path)) {
18              // If the path specified doesn't exist, we return the deliberately
19              // invalid empty string.
20              path = "";
21          }
22      } else {
23          path = gArgs.GetDataDirNet();
24          // If a wallets directory exists, use that, otherwise default to GetDataDir
25          if (fs::is_directory(path / "wallets")) {
26              path /= "wallets";
27          }
28      }
29  
30      return path;
31  }
32  
33  bool IsFeatureSupported(int wallet_version, int feature_version)
34  {
35      return wallet_version >= feature_version;
36  }
37  
38  WalletFeature GetClosestWalletFeature(int version)
39  {
40      static constexpr std::array wallet_features{FEATURE_LATEST, FEATURE_PRE_SPLIT_KEYPOOL, FEATURE_NO_DEFAULT_KEY, FEATURE_HD_SPLIT, FEATURE_HD, FEATURE_COMPRPUBKEY, FEATURE_WALLETCRYPT, FEATURE_BASE};
41      for (const WalletFeature& wf : wallet_features) {
42          if (version >= wf) return wf;
43      }
44      return static_cast<WalletFeature>(0);
45  }
46  } // namespace wallet