/ src / util / fees.cpp
fees.cpp
 1  // Copyright (c) 2009-2010 Satoshi Nakamoto
 2  // Copyright (c) 2009-2020 The Bitcoin Core developers
 3  // Distributed under the MIT software license, see the accompanying
 4  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
 5  
 6  #include <util/fees.h>
 7  
 8  #include <policy/fees.h>
 9  #include <util/strencodings.h>
10  #include <util/string.h>
11  
12  #include <map>
13  #include <string>
14  #include <vector>
15  #include <utility>
16  
17  std::string StringForFeeReason(FeeReason reason)
18  {
19      static const std::map<FeeReason, std::string> fee_reason_strings = {
20          {FeeReason::NONE, "None"},
21          {FeeReason::HALF_ESTIMATE, "Half Target 60% Threshold"},
22          {FeeReason::FULL_ESTIMATE, "Target 85% Threshold"},
23          {FeeReason::DOUBLE_ESTIMATE, "Double Target 95% Threshold"},
24          {FeeReason::CONSERVATIVE, "Conservative Double Target longer horizon"},
25          {FeeReason::MEMPOOL_MIN, "Mempool Min Fee"},
26          {FeeReason::PAYTXFEE, "PayTxFee set"},
27          {FeeReason::FALLBACK, "Fallback fee"},
28          {FeeReason::REQUIRED, "Minimum Required Fee"},
29      };
30      auto reason_string = fee_reason_strings.find(reason);
31  
32      if (reason_string == fee_reason_strings.end()) return "Unknown";
33  
34      return reason_string->second;
35  }
36  
37  const std::vector<std::pair<std::string, FeeEstimateMode>>& FeeModeMap()
38  {
39      static const std::vector<std::pair<std::string, FeeEstimateMode>> FEE_MODES = {
40          {"unset", FeeEstimateMode::UNSET},
41          {"economical", FeeEstimateMode::ECONOMICAL},
42          {"conservative", FeeEstimateMode::CONSERVATIVE},
43      };
44      return FEE_MODES;
45  }
46  
47  std::string FeeModes(const std::string& delimiter)
48  {
49      return Join(FeeModeMap(), delimiter, [&](const std::pair<std::string, FeeEstimateMode>& i) { return i.first; });
50  }
51  
52  std::string InvalidEstimateModeErrorMessage()
53  {
54      return "Invalid estimate_mode parameter, must be one of: \"" + FeeModes("\", \"") + "\"";
55  }
56  
57  bool FeeModeFromString(const std::string& mode_string, FeeEstimateMode& fee_estimate_mode)
58  {
59      auto searchkey = ToUpper(mode_string);
60      for (const auto& pair : FeeModeMap()) {
61          if (ToUpper(pair.first) == searchkey) {
62              fee_estimate_mode = pair.second;
63              return true;
64          }
65      }
66      return false;
67  }