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 106663 : CCoinJoinClientOptions& CCoinJoinClientOptions::Get() 16 : { 17 106663 : std::call_once(onceFlag, CCoinJoinClientOptions::Init); 18 106663 : assert(CCoinJoinClientOptions::_instance); 19 106663 : return *CCoinJoinClientOptions::_instance; 20 : } 21 : 22 8200 : void CCoinJoinClientOptions::SetEnabled(bool fEnabled) 23 : { 24 8200 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 25 8200 : options.fEnableCoinJoin = fEnabled; 26 8200 : } 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 7 : void CCoinJoinClientOptions::SetRounds(int nRounds) 41 : { 42 7 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 43 7 : options.nCoinJoinRounds = nRounds; 44 7 : } 45 : 46 9 : void CCoinJoinClientOptions::SetAmount(CAmount amount) 47 : { 48 9 : CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 49 9 : options.nCoinJoinAmount = amount; 50 9 : } 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 1483 : void CCoinJoinClientOptions::Init() 65 : { 66 1483 : assert(!CCoinJoinClientOptions::_instance); 67 : static CCoinJoinClientOptions instance; 68 1483 : instance.fCoinJoinMultiSession = gArgs.GetBoolArg("-coinjoinmultisession", DEFAULT_COINJOIN_MULTISESSION); 69 1483 : instance.nCoinJoinSessions = std::min(std::max((int)gArgs.GetIntArg("-coinjoinsessions", DEFAULT_COINJOIN_SESSIONS), MIN_COINJOIN_SESSIONS), MAX_COINJOIN_SESSIONS); 70 1483 : instance.nCoinJoinRounds = std::min(std::max((int)gArgs.GetIntArg("-coinjoinrounds", DEFAULT_COINJOIN_ROUNDS), MIN_COINJOIN_ROUNDS), MAX_COINJOIN_ROUNDS); 71 1483 : instance.nCoinJoinAmount = std::min(std::max((int)gArgs.GetIntArg("-coinjoinamount", DEFAULT_COINJOIN_AMOUNT), MIN_COINJOIN_AMOUNT), MAX_COINJOIN_AMOUNT); 72 1483 : instance.nCoinJoinDenomsGoal = std::min(std::max((int)gArgs.GetIntArg("-coinjoindenomsgoal", DEFAULT_COINJOIN_DENOMS_GOAL), MIN_COINJOIN_DENOMS_GOAL), MAX_COINJOIN_DENOMS_GOAL); 73 1483 : instance.nCoinJoinDenomsHardCap = std::min(std::max((int)gArgs.GetIntArg("-coinjoindenomshardcap", DEFAULT_COINJOIN_DENOMS_HARDCAP), MIN_COINJOIN_DENOMS_HARDCAP), MAX_COINJOIN_DENOMS_HARDCAP); 74 1483 : CCoinJoinClientOptions::_instance = &instance; 75 1483 : } 76 : 77 22 : void CCoinJoinClientOptions::GetJsonInfo(UniValue& obj) 78 : { 79 22 : assert(obj.isObject()); 80 22 : const CCoinJoinClientOptions& options = CCoinJoinClientOptions::Get(); 81 22 : obj.pushKV("enabled", options.fEnableCoinJoin.load()); 82 22 : obj.pushKV("multisession", options.fCoinJoinMultiSession.load()); 83 22 : obj.pushKV("max_sessions", options.nCoinJoinSessions.load()); 84 22 : obj.pushKV("max_rounds", options.nCoinJoinRounds.load()); 85 22 : obj.pushKV("max_amount", options.nCoinJoinAmount.load()); 86 22 : obj.pushKV("denoms_goal", options.nCoinJoinDenomsGoal.load()); 87 22 : obj.pushKV("denoms_hardcap", options.nCoinJoinDenomsHardCap.load()); 88 22 : }