mirror of
https://github.com/dashpay/dash.git
synced 2024-12-29 13:59:06 +01:00
ef4dfa8524
(script modified to account for Dash backports, doesn't account for rebasing) ------------- BEGIN SCRIPT --------------- mkdir -p src/util git mv src/util.h src/util/system.h git mv src/util.cpp src/util/system.cpp git mv src/utilmemory.h src/util/memory.h git mv src/utilmoneystr.h src/util/moneystr.h git mv src/utilmoneystr.cpp src/util/moneystr.cpp git mv src/utilstrencodings.h src/util/strencodings.h git mv src/utilstrencodings.cpp src/util/strencodings.cpp git mv src/utiltime.h src/util/time.h git mv src/utiltime.cpp src/util/time.cpp git mv src/utilasmap.h src/util/asmap.h git mv src/utilasmap.cpp src/util/asmap.cpp git mv src/utilstring.h src/util/string.h git mv src/utilstring.cpp src/util/string.cpp gsed -i 's/<util\.h>/<util\/system\.h>/g' $(git ls-files 'src/*.h' 'src/*.cpp') gsed -i 's/<utilmemory\.h>/<util\/memory\.h>/g' $(git ls-files 'src/*.h' 'src/*.cpp') gsed -i 's/<utilmoneystr\.h>/<util\/moneystr\.h>/g' $(git ls-files 'src/*.h' 'src/*.cpp') gsed -i 's/<utilstrencodings\.h>/<util\/strencodings\.h>/g' $(git ls-files 'src/*.h' 'src/*.cpp') gsed -i 's/<utiltime\.h>/<util\/time\.h>/g' $(git ls-files 'src/*.h' 'src/*.cpp') gsed -i 's/<utilasmap\.h>/<util\/asmap\.h>/g' $(git ls-files 'src/*.h' 'src/*.cpp') gsed -i 's/<utilstring\.h>/<util\/string\.h>/g' $(git ls-files 'src/*.h' 'src/*.cpp') gsed -i 's/BITCOIN_UTIL_H/BITCOIN_UTIL_SYSTEM_H/g' src/util/system.h gsed -i 's/BITCOIN_UTILMEMORY_H/BITCOIN_UTIL_MEMORY_H/g' src/util/memory.h gsed -i 's/BITCOIN_UTILMONEYSTR_H/BITCOIN_UTIL_MONEYSTR_H/g' src/util/moneystr.h gsed -i 's/BITCOIN_UTILSTRENCODINGS_H/BITCOIN_UTIL_STRENCODINGS_H/g' src/util/strencodings.h gsed -i 's/BITCOIN_UTILTIME_H/BITCOIN_UTIL_TIME_H/g' src/util/time.h gsed -i 's/BITCOIN_UTILASMAP_H/BITCOIN_UTIL_ASMAP_H/g' src/util/asmap.h gsed -i 's/BITCOIN_UTILSTRING_H/BITCOIN_UTIL_STRING_H/g' src/util/string.h gsed -i 's/ util\.\(h\|cpp\)/ util\/system\.\1/g' src/Makefile.am gsed -i 's/utilmemory\.\(h\|cpp\)/util\/memory\.\1/g' src/Makefile.am gsed -i 's/utilmoneystr\.\(h\|cpp\)/util\/moneystr\.\1/g' src/Makefile.am gsed -i 's/utilstrencodings\.\(h\|cpp\)/util\/strencodings\.\1/g' src/Makefile.am gsed -i 's/utiltime\.\(h\|cpp\)/util\/time\.\1/g' src/Makefile.am gsed -i 's/utilasmap\.\(h\|cpp\)/util\/asmap\.\1/g' src/Makefile.am gsed -i 's/utilstring\.\(h\|cpp\)/util\/string\.\1/g' src/Makefile.am gsed -i 's/-> util ->/-> util\/system ->/' test/lint/lint-circular-dependencies.sh gsed -i 's/src\/util\.cpp/src\/util\/system\.cpp/g' test/lint/lint-format-strings.py test/lint/lint-locale-dependence.sh gsed -i 's/src\/utilmoneystr\.cpp/src\/util\/moneystr\.cpp/g' test/lint/lint-locale-dependence.sh gsed -i 's/src\/utilstrencodings\.\(h\|cpp\)/src\/util\/strencodings\.\1/g' test/lint/lint-locale-dependence.sh ------------- END SCRIPT ---------------
179 lines
7.8 KiB
C++
179 lines
7.8 KiB
C++
// Copyright (c) 2019-2021 The Dash Core developers
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include <validation.h>
|
|
#ifdef ENABLE_WALLET
|
|
#include <coinjoin/coinjoin-client.h>
|
|
#include <coinjoin/coinjoin-client-options.h>
|
|
#include <wallet/rpcwallet.h>
|
|
#endif // ENABLE_WALLET
|
|
#include <coinjoin/coinjoin-server.h>
|
|
#include <rpc/server.h>
|
|
#include <util/strencodings.h>
|
|
|
|
#include <univalue.h>
|
|
|
|
#ifdef ENABLE_WALLET
|
|
static UniValue coinjoin(const JSONRPCRequest& request)
|
|
{
|
|
std::shared_ptr<CWallet> const wallet = GetWalletForJSONRPCRequest(request);
|
|
CWallet* const pwallet = wallet.get();
|
|
if (!EnsureWalletIsAvailable(pwallet, request.fHelp))
|
|
return NullUniValue;
|
|
|
|
if (request.fHelp || request.params.size() != 1)
|
|
throw std::runtime_error(
|
|
"coinjoin \"command\"\n"
|
|
"\nArguments:\n"
|
|
"1. \"command\" (string or set of strings, required) The command to execute\n"
|
|
"\nAvailable commands:\n"
|
|
" start - Start mixing\n"
|
|
" stop - Stop mixing\n"
|
|
" reset - Reset mixing\n"
|
|
);
|
|
|
|
if (fMasternodeMode)
|
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "Client-side mixing is not supported on masternodes");
|
|
|
|
if (!CCoinJoinClientOptions::IsEnabled()) {
|
|
if (!gArgs.GetBoolArg("-enablecoinjoin", true)) {
|
|
// otherwise it's on by default, unless cmd line option says otherwise
|
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "Mixing is disabled via -enablecoinjoin=0 command line option, remove it to enable mixing again");
|
|
} else {
|
|
// not enablecoinjoin=false case,
|
|
// most likely something bad happened and we disabled it while running the wallet
|
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "Mixing is disabled due to some internal error");
|
|
}
|
|
}
|
|
|
|
auto it = coinJoinClientManagers.find(pwallet->GetName());
|
|
|
|
if (request.params[0].get_str() == "start") {
|
|
{
|
|
LOCK(pwallet->cs_wallet);
|
|
if (pwallet->IsLocked(true))
|
|
throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Error: Please unlock wallet for mixing with walletpassphrase first.");
|
|
}
|
|
|
|
if (!it->second->StartMixing()) {
|
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "Mixing has been started already.");
|
|
}
|
|
|
|
bool result = it->second->DoAutomaticDenominating(*g_connman);
|
|
return "Mixing " + (result ? "started successfully" : ("start failed: " + it->second->GetStatuses() + ", will retry"));
|
|
}
|
|
|
|
if (request.params[0].get_str() == "stop") {
|
|
it->second->StopMixing();
|
|
return "Mixing was stopped";
|
|
}
|
|
|
|
if (request.params[0].get_str() == "reset") {
|
|
it->second->ResetPool();
|
|
return "Mixing was reset";
|
|
}
|
|
|
|
return "Unknown command, please see \"help coinjoin\"";
|
|
}
|
|
#endif // ENABLE_WALLET
|
|
|
|
static UniValue getpoolinfo(const JSONRPCRequest& request)
|
|
{
|
|
throw std::runtime_error(
|
|
"getpoolinfo\n"
|
|
"DEPRECATED. Please use getcoinjoininfo instead.\n"
|
|
);
|
|
}
|
|
|
|
static UniValue getcoinjoininfo(const JSONRPCRequest& request)
|
|
{
|
|
if (request.fHelp || request.params.size() != 0) {
|
|
throw std::runtime_error(
|
|
"getcoinjoininfo\n"
|
|
"Returns an object containing an information about CoinJoin settings and state.\n"
|
|
"\nResult (for regular nodes):\n"
|
|
"{\n"
|
|
" \"enabled\": true|false, (bool) Whether mixing functionality is enabled\n"
|
|
" \"multisession\": true|false, (bool) Whether CoinJoin Multisession option is enabled\n"
|
|
" \"max_sessions\": xxx, (numeric) How many parallel mixing sessions can there be at once\n"
|
|
" \"max_rounds\": xxx, (numeric) How many rounds to mix\n"
|
|
" \"max_amount\": xxx, (numeric) Target CoinJoin balance in " + CURRENCY_UNIT + "\n"
|
|
" \"denoms_goal\": xxx, (numeric) How many inputs of each denominated amount to target\n"
|
|
" \"denoms_hardcap\": xxx, (numeric) Maximum limit of how many inputs of each denominated amount to create\n"
|
|
" \"queue_size\": xxx, (numeric) How many queues there are currently on the network\n"
|
|
" \"running\": true|false, (bool) Whether mixing is currently running\n"
|
|
" \"sessions\": (array of json objects)\n"
|
|
" [\n"
|
|
" {\n"
|
|
" \"protxhash\": \"...\", (string) The ProTxHash of the masternode\n"
|
|
" \"outpoint\": \"txid-index\", (string) The outpoint of the masternode\n"
|
|
" \"service\": \"host:port\", (string) The IP address and port of the masternode\n"
|
|
" \"denomination\": xxx, (numeric) The denomination of the mixing session in " + CURRENCY_UNIT + "\n"
|
|
" \"state\": \"...\", (string) Current state of the mixing session\n"
|
|
" \"entries_count\": xxx, (numeric) The number of entries in the mixing session\n"
|
|
" }\n"
|
|
" ,...\n"
|
|
" ],\n"
|
|
" \"keys_left\": xxx, (numeric) How many new keys are left since last automatic backup\n"
|
|
" \"warnings\": \"...\" (string) Warnings if any\n"
|
|
"}\n"
|
|
"\nResult (for masternodes):\n"
|
|
"{\n"
|
|
" \"queue_size\": xxx, (numeric) How many queues there are currently on the network\n"
|
|
" \"denomination\": xxx, (numeric) The denomination of the mixing session in " + CURRENCY_UNIT + "\n"
|
|
" \"state\": \"...\", (string) Current state of the mixing session\n"
|
|
" \"entries_count\": xxx, (numeric) The number of entries in the mixing session\n"
|
|
"}\n"
|
|
"\nExamples:\n"
|
|
+ HelpExampleCli("getcoinjoininfo", "")
|
|
+ HelpExampleRpc("getcoinjoininfo", "")
|
|
);
|
|
}
|
|
|
|
UniValue obj(UniValue::VOBJ);
|
|
|
|
if (fMasternodeMode) {
|
|
coinJoinServer.GetJsonInfo(obj);
|
|
return obj;
|
|
}
|
|
|
|
|
|
#ifdef ENABLE_WALLET
|
|
|
|
CCoinJoinClientOptions::GetJsonInfo(obj);
|
|
|
|
obj.pushKV("queue_size", coinJoinClientQueueManager.GetQueueSize());
|
|
|
|
std::shared_ptr<CWallet> const wallet = GetWalletForJSONRPCRequest(request);
|
|
CWallet* const pwallet = wallet.get();
|
|
if (!pwallet) {
|
|
return obj;
|
|
}
|
|
|
|
coinJoinClientManagers.at(pwallet->GetName())->GetJsonInfo(obj);
|
|
|
|
obj.pushKV("keys_left", pwallet->nKeysLeftSinceAutoBackup);
|
|
obj.pushKV("warnings", pwallet->nKeysLeftSinceAutoBackup < COINJOIN_KEYS_THRESHOLD_WARNING
|
|
? "WARNING: keypool is almost depleted!" : "");
|
|
#endif // ENABLE_WALLET
|
|
|
|
return obj;
|
|
}
|
|
|
|
static const CRPCCommand commands[] =
|
|
{ // category name actor (function) argNames
|
|
// --------------------- ------------------------ ---------------------------------
|
|
{ "dash", "getpoolinfo", &getpoolinfo, {} },
|
|
{ "dash", "getcoinjoininfo", &getcoinjoininfo, {} },
|
|
#ifdef ENABLE_WALLET
|
|
{ "dash", "coinjoin", &coinjoin, {} },
|
|
#endif // ENABLE_WALLET
|
|
};
|
|
|
|
void RegisterCoinJoinRPCCommands(CRPCTable &t)
|
|
{
|
|
for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++)
|
|
t.appendCommand(commands[vcidx].name, &commands[vcidx]);
|
|
}
|