Line data Source code
1 : // Copyright (c) 2021-2025 The Dash Core developers 2 : // Distributed under the MIT/X11 software license, see the accompanying 3 : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : 5 : #include <coinjoin/options.h> 6 : 7 : #include <util/system.h> 8 : #include <univalue.h> 9 : 10 : #include <cassert> 11 : 12 : CCoinJoinClientOptions* CCoinJoinClientOptions::_instance{nullptr}; 13 : std::once_flag CCoinJoinClientOptions::onceFlag; 14 : 15 275 : CCoinJoinClientOptions& CCoinJoinClientOptions::Get() 16 : { 17 275 : std::call_once(onceFlag, CCoinJoinClientOptions::Init); 18 275 : assert(CCoinJoinClientOptions::_instance); 19 275 : return *CCoinJoinClientOptions::_instance; 20 : } 21 : 22 227 : void CCoinJoinClientOptions::SetEnabled(bool fEnabled) 23 : { 24 227 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 25 227 : options.fEnableCoinJoin = fEnabled; 26 227 : } 27 : 28 2 : void CCoinJoinClientOptions::SetMultiSessionEnabled(bool fEnabled) 29 : { 30 2 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 31 2 : options.fCoinJoinMultiSession = fEnabled; 32 2 : } 33 : 34 0 : void CCoinJoinClientOptions::SetSessions(int sessions) 35 : { 36 0 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 37 0 : options.nCoinJoinSessions = sessions; 38 0 : } 39 : 40 1 : void CCoinJoinClientOptions::SetRounds(int nRounds) 41 : { 42 1 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 43 1 : options.nCoinJoinRounds = nRounds; 44 1 : } 45 : 46 1 : void CCoinJoinClientOptions::SetAmount(CAmount amount) 47 : { 48 1 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 49 1 : options.nCoinJoinAmount = amount; 50 1 : } 51 : 52 0 : void CCoinJoinClientOptions::SetDenomsGoal(int denoms_goal) 53 : { 54 0 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 55 0 : options.nCoinJoinDenomsGoal = denoms_goal; 56 0 : } 57 : 58 0 : void CCoinJoinClientOptions::SetDenomsHardCap(int denoms_hardcap) 59 : { 60 0 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 61 0 : options.nCoinJoinDenomsHardCap = denoms_hardcap; 62 0 : } 63 : 64 47 : void CCoinJoinClientOptions::Init() 65 : { 66 47 : assert(!CCoinJoinClientOptions::_instance); 67 : static CCoinJoinClientOptions instance; 68 47 : instance.fCoinJoinMultiSession = gArgs.GetBoolArg("-coinjoinmultisession", DEFAULT_COINJOIN_MULTISESSION); 69 47 : instance.nCoinJoinSessions = std::min(std::max((int)gArgs.GetIntArg("-coinjoinsessions", DEFAULT_COINJOIN_SESSIONS), MIN_COINJOIN_SESSIONS), MAX_COINJOIN_SESSIONS); 70 47 : instance.nCoinJoinRounds = std::min(std::max((int)gArgs.GetIntArg("-coinjoinrounds", DEFAULT_COINJOIN_ROUNDS), MIN_COINJOIN_ROUNDS), MAX_COINJOIN_ROUNDS); 71 47 : instance.nCoinJoinAmount = std::min(std::max((int)gArgs.GetIntArg("-coinjoinamount", DEFAULT_COINJOIN_AMOUNT), MIN_COINJOIN_AMOUNT), MAX_COINJOIN_AMOUNT); 72 47 : instance.nCoinJoinDenomsGoal = std::min(std::max((int)gArgs.GetIntArg("-coinjoindenomsgoal", DEFAULT_COINJOIN_DENOMS_GOAL), MIN_COINJOIN_DENOMS_GOAL), MAX_COINJOIN_DENOMS_GOAL); 73 47 : instance.nCoinJoinDenomsHardCap = std::min(std::max((int)gArgs.GetIntArg("-coinjoindenomshardcap", DEFAULT_COINJOIN_DENOMS_HARDCAP), MIN_COINJOIN_DENOMS_HARDCAP), MAX_COINJOIN_DENOMS_HARDCAP); 74 47 : CCoinJoinClientOptions::_instance = &instance; 75 47 : } 76 : 77 0 : void CCoinJoinClientOptions::GetJsonInfo(UniValue& obj) 78 : { 79 0 : assert(obj.isObject()); 80 0 : const CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 81 0 : obj.pushKV("enabled", options.fEnableCoinJoin.load()); 82 0 : obj.pushKV("multisession", options.fCoinJoinMultiSession.load()); 83 0 : obj.pushKV("max_sessions", options.nCoinJoinSessions.load()); 84 0 : obj.pushKV("max_rounds", options.nCoinJoinRounds.load()); 85 0 : obj.pushKV("max_amount", options.nCoinJoinAmount.load()); 86 0 : obj.pushKV("denoms_goal", options.nCoinJoinDenomsGoal.load()); 87 0 : obj.pushKV("denoms_hardcap", options.nCoinJoinDenomsHardCap.load()); 88 0 : }