LCOV - code coverage report
Current view: top level - src/coinjoin - options.cpp (source / functions) Hit Total Coverage
Test: test_dash_coverage.info Lines: 30 53 56.6 %
Date: 2026-06-25 07:23:51 Functions: 6 10 60.0 %

          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 : }

Generated by: LCOV version 1.16