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 }