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 
StringForFeeReason(FeeReason reason)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 
FeeModeMap()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 
FeeModes(const std::string & delimiter)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 
InvalidEstimateModeErrorMessage()52 const std::string InvalidEstimateModeErrorMessage()
53 {
54     return "Invalid estimate_mode parameter, must be one of: \"" + FeeModes("\", \"") + "\"";
55 }
56 
FeeModeFromString(const std::string & mode_string,FeeEstimateMode & fee_estimate_mode)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 }
68