fix #8775 backport
This commit is contained in:
parent
f9147466f3
commit
c094d4bbe6
@ -19,12 +19,11 @@
|
||||
#include "rpc/server.h"
|
||||
#include "util.h"
|
||||
#include "utilmoneystr.h"
|
||||
#include "wallet/rpcwallet.h"
|
||||
#ifdef ENABLE_WALLET
|
||||
#include "wallet/wallet.h"
|
||||
#endif // ENABLE_WALLET
|
||||
|
||||
bool EnsureWalletIsAvailable(bool avoidException);
|
||||
|
||||
void gobject_count_help()
|
||||
{
|
||||
throw std::runtime_error(
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include "utilmoneystr.h"
|
||||
#include "txmempool.h"
|
||||
|
||||
#include "wallet/rpcwallet.h"
|
||||
|
||||
#include "evo/specialtx.h"
|
||||
#include "evo/deterministicmns.h"
|
||||
|
||||
@ -29,11 +31,7 @@
|
||||
|
||||
UniValue masternodelist(const JSONRPCRequest& request);
|
||||
|
||||
bool EnsureWalletIsAvailable(bool avoidException);
|
||||
|
||||
#ifdef ENABLE_WALLET
|
||||
void EnsureWalletIsUnlocked();
|
||||
|
||||
UniValue privatesend(const JSONRPCRequest& request)
|
||||
{
|
||||
CWallet* const pwallet = GetWalletForJSONRPCRequest(request);
|
||||
|
@ -90,10 +90,10 @@ static CBLSSecretKey ParseBLSSecretKey(const std::string& hexKey, const std::str
|
||||
#ifdef ENABLE_WALLET
|
||||
|
||||
template<typename SpecialTxPayload>
|
||||
static void FundSpecialTx(CMutableTransaction& tx, const SpecialTxPayload& payload, const CTxDestination& fundDest)
|
||||
static void FundSpecialTx(CWallet* pwallet, CMutableTransaction& tx, const SpecialTxPayload& payload, const CTxDestination& fundDest)
|
||||
{
|
||||
assert(pwalletMain != NULL);
|
||||
LOCK2(cs_main, pwalletMain->cs_wallet);
|
||||
assert(pwallet != NULL);
|
||||
LOCK2(cs_main, pwallet->cs_wallet);
|
||||
|
||||
CTxDestination nodest = CNoDestination();
|
||||
if (fundDest == nodest) {
|
||||
@ -124,7 +124,7 @@ static void FundSpecialTx(CMutableTransaction& tx, const SpecialTxPayload& paylo
|
||||
coinControl.fRequireAllInputs = false;
|
||||
|
||||
std::vector<COutput> vecOutputs;
|
||||
pwalletMain->AvailableCoins(vecOutputs);
|
||||
pwallet->AvailableCoins(vecOutputs);
|
||||
|
||||
for (const auto& out : vecOutputs) {
|
||||
CTxDestination txDest;
|
||||
@ -404,7 +404,7 @@ UniValue protx_register(const JSONRPCRequest& request)
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Dash address: ") + request.params[paramIdx + 6].get_str());
|
||||
}
|
||||
|
||||
FundSpecialTx(tx, ptx, fundAddress.Get());
|
||||
FundSpecialTx(pwallet, tx, ptx, fundAddress.Get());
|
||||
UpdateSpecialTxInputsHash(tx, ptx);
|
||||
|
||||
if (isFundRegister) {
|
||||
@ -508,6 +508,7 @@ void protx_update_service_help()
|
||||
|
||||
UniValue protx_update_service(const JSONRPCRequest& request)
|
||||
{
|
||||
CWallet* const pwallet = GetWalletForJSONRPCRequest(request);
|
||||
if (request.fHelp || (request.params.size() < 4 || request.params.size() > 6))
|
||||
protx_update_service_help();
|
||||
|
||||
@ -567,7 +568,7 @@ UniValue protx_update_service(const JSONRPCRequest& request)
|
||||
}
|
||||
}
|
||||
|
||||
FundSpecialTx(tx, ptx, feeSource);
|
||||
FundSpecialTx(pwallet, tx, ptx, feeSource);
|
||||
|
||||
SignSpecialTxPayloadByHash(tx, ptx, keyOperator);
|
||||
SetTxPayload(tx, ptx);
|
||||
@ -651,7 +652,7 @@ UniValue protx_update_registrar(const JSONRPCRequest& request)
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Dash address: ") + request.params[5].get_str());
|
||||
}
|
||||
|
||||
FundSpecialTx(tx, ptx, feeSourceAddress.Get());
|
||||
FundSpecialTx(pwallet, tx, ptx, feeSourceAddress.Get());
|
||||
SignSpecialTxPayloadByHash(tx, ptx, keyOwner);
|
||||
SetTxPayload(tx, ptx);
|
||||
|
||||
@ -681,6 +682,7 @@ void protx_revoke_help()
|
||||
|
||||
UniValue protx_revoke(const JSONRPCRequest& request)
|
||||
{
|
||||
CWallet* const pwallet = GetWalletForJSONRPCRequest(request);
|
||||
if (request.fHelp || (request.params.size() < 3 || request.params.size() > 5)) {
|
||||
protx_revoke_help();
|
||||
}
|
||||
@ -716,17 +718,17 @@ UniValue protx_revoke(const JSONRPCRequest& request)
|
||||
CBitcoinAddress feeSourceAddress = CBitcoinAddress(request.params[4].get_str());
|
||||
if (!feeSourceAddress.IsValid())
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Dash address: ") + request.params[4].get_str());
|
||||
FundSpecialTx(tx, ptx, feeSourceAddress.Get());
|
||||
FundSpecialTx(pwallet, tx, ptx, feeSourceAddress.Get());
|
||||
} else if (dmn->pdmnState->scriptOperatorPayout != CScript()) {
|
||||
// Using funds from previousely specified operator payout address
|
||||
CTxDestination txDest;
|
||||
ExtractDestination(dmn->pdmnState->scriptOperatorPayout, txDest);
|
||||
FundSpecialTx(tx, ptx, txDest);
|
||||
FundSpecialTx(pwallet, tx, ptx, txDest);
|
||||
} else if (dmn->pdmnState->scriptPayout != CScript()) {
|
||||
// Using funds from previousely specified masternode payout address
|
||||
CTxDestination txDest;
|
||||
ExtractDestination(dmn->pdmnState->scriptPayout, txDest);
|
||||
FundSpecialTx(tx, ptx, txDest);
|
||||
FundSpecialTx(pwallet, tx, ptx, txDest);
|
||||
} else {
|
||||
throw JSONRPCError(RPC_INTERNAL_ERROR, "No payout or fee source addresses found, can't revoke");
|
||||
}
|
||||
@ -872,8 +874,8 @@ UniValue protx_list(const JSONRPCRequest& request)
|
||||
CDeterministicMNList mnList = deterministicMNManager->GetListForBlock(chainActive[height]->GetBlockHash());
|
||||
mnList.ForEachMN(false, [&](const CDeterministicMNCPtr& dmn) {
|
||||
if (setOutpts.count(dmn->collateralOutpoint) ||
|
||||
CheckWalletOwnsKey(dmn->pdmnState->keyIDOwner) ||
|
||||
CheckWalletOwnsKey(dmn->pdmnState->keyIDVoting) ||
|
||||
CheckWalletOwnsKey(pwallet, dmn->pdmnState->keyIDOwner) ||
|
||||
CheckWalletOwnsKey(pwallet, dmn->pdmnState->keyIDVoting) ||
|
||||
CheckWalletOwnsScript(pwallet, dmn->pdmnState->scriptPayout) ||
|
||||
CheckWalletOwnsScript(pwallet, dmn->pdmnState->scriptOperatorPayout)) {
|
||||
ret.push_back(BuildDMNListEntry(pwallet, dmn, detailed));
|
||||
|
@ -708,7 +708,7 @@ UniValue dumpprivkey(const JSONRPCRequest& request)
|
||||
UniValue dumphdinfo(const JSONRPCRequest& request)
|
||||
{
|
||||
CWallet* const pwallet = GetWalletForJSONRPCRequest(request);
|
||||
if (!EnsureWalletIsAvailable(request.fHelp))
|
||||
if (!EnsureWalletIsAvailable(pwallet, request.fHelp))
|
||||
return NullUniValue;
|
||||
|
||||
if (request.fHelp || request.params.size() != 0)
|
||||
|
@ -461,7 +461,7 @@ UniValue instantsendtoaddress(const JSONRPCRequest& request)
|
||||
throw std::runtime_error(
|
||||
"instantsendtoaddress \"address\" amount ( \"comment\" \"comment-to\" subtractfeefromamount )\n"
|
||||
"\nSend an amount to a given address. The amount is a real and is rounded to the nearest 0.00000001\n"
|
||||
+ HelpRequiringPassphrase() +
|
||||
+ HelpRequiringPassphrase(pwallet) +
|
||||
"\nArguments:\n"
|
||||
"1. \"address\" (string, required) The dash address to send to.\n"
|
||||
"2. \"amount\" (numeric, required) The amount in " + CURRENCY_UNIT + " to send. eg 0.1\n"
|
||||
@ -2026,7 +2026,7 @@ UniValue keypoolrefill(const JSONRPCRequest& request)
|
||||
EnsureWalletIsUnlocked(pwallet);
|
||||
pwallet->TopUpKeyPool(kpSize);
|
||||
|
||||
if (pwallet->GetKeyPoolSize() < (pwallet->IsHDEnabled() ? kpSize * 2 : kpSize))
|
||||
if (pwallet->GetKeyPoolSize() < (pwallet->IsHDEnabled() ? kpSize * 2 : kpSize)) {
|
||||
throw JSONRPCError(RPC_WALLET_ERROR, "Error refreshing keypool.");
|
||||
}
|
||||
|
||||
@ -2048,7 +2048,7 @@ UniValue walletpassphrase(const JSONRPCRequest& request)
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
if (pwallet->IsCrypted() && (request.fHelp || request.params.size() < 2 || request.params.size() > 3))
|
||||
if (pwallet->IsCrypted() && (request.fHelp || request.params.size() < 2 || request.params.size() > 3)) {
|
||||
throw std::runtime_error(
|
||||
"walletpassphrase \"passphrase\" timeout ( mixingonly )\n"
|
||||
"\nStores the wallet decryption key in memory for 'timeout' seconds.\n"
|
||||
@ -2118,7 +2118,7 @@ UniValue walletpassphrasechange(const JSONRPCRequest& request)
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
if (pwallet->IsCrypted() && (request.fHelp || request.params.size() != 2))
|
||||
if (pwallet->IsCrypted() && (request.fHelp || request.params.size() != 2)) {
|
||||
throw std::runtime_error(
|
||||
"walletpassphrasechange \"oldpassphrase\" \"newpassphrase\"\n"
|
||||
"\nChanges the wallet passphrase from 'oldpassphrase' to 'newpassphrase'.\n"
|
||||
@ -2169,7 +2169,7 @@ UniValue walletlock(const JSONRPCRequest& request)
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
if (pwallet->IsCrypted() && (request.fHelp || request.params.size() != 0))
|
||||
if (pwallet->IsCrypted() && (request.fHelp || request.params.size() != 0)) {
|
||||
throw std::runtime_error(
|
||||
"walletlock\n"
|
||||
"\nRemoves the wallet encryption key from memory, locking the wallet.\n"
|
||||
@ -2209,7 +2209,7 @@ UniValue encryptwallet(const JSONRPCRequest& request)
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
if (!pwallet->IsCrypted() && (request.fHelp || request.params.size() != 1))
|
||||
if (!pwallet->IsCrypted() && (request.fHelp || request.params.size() != 1)) {
|
||||
throw std::runtime_error(
|
||||
"encryptwallet \"passphrase\"\n"
|
||||
"\nEncrypts the wallet with 'passphrase'. This is for first time encryption.\n"
|
||||
@ -2437,7 +2437,8 @@ UniValue settxfee(const JSONRPCRequest& request)
|
||||
|
||||
UniValue setprivatesendrounds(const JSONRPCRequest& request)
|
||||
{
|
||||
if (!EnsureWalletIsAvailable(request.fHelp))
|
||||
CWallet* const pwallet = GetWalletForJSONRPCRequest(request);
|
||||
if (!EnsureWalletIsAvailable(pwallet, request.fHelp))
|
||||
return NullUniValue;
|
||||
|
||||
if (request.fHelp || request.params.size() != 1)
|
||||
@ -2464,7 +2465,8 @@ UniValue setprivatesendrounds(const JSONRPCRequest& request)
|
||||
|
||||
UniValue setprivatesendamount(const JSONRPCRequest& request)
|
||||
{
|
||||
if (!EnsureWalletIsAvailable(request.fHelp))
|
||||
CWallet* const pwallet = GetWalletForJSONRPCRequest(request);
|
||||
if (!EnsureWalletIsAvailable(pwallet, request.fHelp))
|
||||
return NullUniValue;
|
||||
|
||||
if (request.fHelp || request.params.size() != 1)
|
||||
@ -2550,7 +2552,7 @@ UniValue getwalletinfo(const JSONRPCRequest& request)
|
||||
}
|
||||
obj.push_back(Pair("keys_left", pwallet->nKeysLeftSinceAutoBackup));
|
||||
if (pwallet->IsCrypted())
|
||||
obj.push_back(Pair("unlocked_until", nWalletUnlockTime));
|
||||
obj.push_back(Pair("unlocked_until", pwallet->nRelockTime));
|
||||
obj.push_back(Pair("paytxfee", ValueFromAmount(payTxFee.GetFeePerK())));
|
||||
if (fHDEnabled) {
|
||||
obj.push_back(Pair("hdchainid", hdChainCurrent.GetID().GetHex()));
|
||||
@ -2576,7 +2578,8 @@ UniValue getwalletinfo(const JSONRPCRequest& request)
|
||||
|
||||
UniValue keepass(const JSONRPCRequest& request)
|
||||
{
|
||||
if (!EnsureWalletIsAvailable(request.fHelp))
|
||||
CWallet* const pwallet = GetWalletForJSONRPCRequest(request);
|
||||
if (!EnsureWalletIsAvailable(pwallet, request.fHelp))
|
||||
return NullUniValue;
|
||||
|
||||
std::string strCommand;
|
||||
@ -2947,6 +2950,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
||||
|
||||
UniValue setbip69enabled(const JSONRPCRequest& request)
|
||||
{
|
||||
CWallet* const pwallet = GetWalletForJSONRPCRequest(request);
|
||||
if (!EnsureWalletIsAvailable(pwallet, request.fHelp))
|
||||
return NullUniValue;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user