mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-11 12:22:39 -03:00
Wallet: Refactor FundTransaction to accept parameters via CCoinControl
This commit is contained in:
parent
578ec80d4f
commit
891c5eeec2
3 changed files with 14 additions and 17 deletions
|
@ -21,6 +21,7 @@
|
||||||
#include "timedata.h"
|
#include "timedata.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "utilmoneystr.h"
|
#include "utilmoneystr.h"
|
||||||
|
#include "wallet/coincontrol.h"
|
||||||
#include "wallet/feebumper.h"
|
#include "wallet/feebumper.h"
|
||||||
#include "wallet/wallet.h"
|
#include "wallet/wallet.h"
|
||||||
#include "wallet/walletdb.h"
|
#include "wallet/walletdb.h"
|
||||||
|
@ -2678,20 +2679,21 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
||||||
|
|
||||||
RPCTypeCheck(request.params, boost::assign::list_of(UniValue::VSTR));
|
RPCTypeCheck(request.params, boost::assign::list_of(UniValue::VSTR));
|
||||||
|
|
||||||
CTxDestination changeAddress = CNoDestination();
|
CCoinControl coinControl;
|
||||||
|
coinControl.destChange = CNoDestination();
|
||||||
int changePosition = -1;
|
int changePosition = -1;
|
||||||
bool includeWatching = false;
|
coinControl.fAllowWatchOnly = false; // include watching
|
||||||
bool lockUnspents = false;
|
bool lockUnspents = false;
|
||||||
bool reserveChangeKey = true;
|
bool reserveChangeKey = true;
|
||||||
CFeeRate feeRate = CFeeRate(0);
|
coinControl.nFeeRate = CFeeRate(0);
|
||||||
bool overrideEstimatedFeerate = false;
|
coinControl.fOverrideFeeRate = false;
|
||||||
UniValue subtractFeeFromOutputs;
|
UniValue subtractFeeFromOutputs;
|
||||||
std::set<int> setSubtractFeeFromOutputs;
|
std::set<int> setSubtractFeeFromOutputs;
|
||||||
|
|
||||||
if (request.params.size() > 1) {
|
if (request.params.size() > 1) {
|
||||||
if (request.params[1].type() == UniValue::VBOOL) {
|
if (request.params[1].type() == UniValue::VBOOL) {
|
||||||
// backward compatibility bool only fallback
|
// backward compatibility bool only fallback
|
||||||
includeWatching = request.params[1].get_bool();
|
coinControl.fAllowWatchOnly = request.params[1].get_bool();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
RPCTypeCheck(request.params, boost::assign::list_of(UniValue::VSTR)(UniValue::VOBJ));
|
RPCTypeCheck(request.params, boost::assign::list_of(UniValue::VSTR)(UniValue::VOBJ));
|
||||||
|
@ -2716,14 +2718,14 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
||||||
if (!address.IsValid())
|
if (!address.IsValid())
|
||||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "changeAddress must be a valid bitcoin address");
|
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "changeAddress must be a valid bitcoin address");
|
||||||
|
|
||||||
changeAddress = address.Get();
|
coinControl.destChange = address.Get();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.exists("changePosition"))
|
if (options.exists("changePosition"))
|
||||||
changePosition = options["changePosition"].get_int();
|
changePosition = options["changePosition"].get_int();
|
||||||
|
|
||||||
if (options.exists("includeWatching"))
|
if (options.exists("includeWatching"))
|
||||||
includeWatching = options["includeWatching"].get_bool();
|
coinControl.fAllowWatchOnly = options["includeWatching"].get_bool();
|
||||||
|
|
||||||
if (options.exists("lockUnspents"))
|
if (options.exists("lockUnspents"))
|
||||||
lockUnspents = options["lockUnspents"].get_bool();
|
lockUnspents = options["lockUnspents"].get_bool();
|
||||||
|
@ -2733,8 +2735,8 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
||||||
|
|
||||||
if (options.exists("feeRate"))
|
if (options.exists("feeRate"))
|
||||||
{
|
{
|
||||||
feeRate = CFeeRate(AmountFromValue(options["feeRate"]));
|
coinControl.nFeeRate = CFeeRate(AmountFromValue(options["feeRate"]));
|
||||||
overrideEstimatedFeerate = true;
|
coinControl.fOverrideFeeRate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.exists("subtractFeeFromOutputs"))
|
if (options.exists("subtractFeeFromOutputs"))
|
||||||
|
@ -2767,7 +2769,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
||||||
CAmount nFeeOut;
|
CAmount nFeeOut;
|
||||||
std::string strFailReason;
|
std::string strFailReason;
|
||||||
|
|
||||||
if (!pwallet->FundTransaction(tx, nFeeOut, overrideEstimatedFeerate, feeRate, changePosition, strFailReason, includeWatching, lockUnspents, setSubtractFeeFromOutputs, reserveChangeKey, changeAddress)) {
|
if (!pwallet->FundTransaction(tx, nFeeOut, changePosition, strFailReason, lockUnspents, setSubtractFeeFromOutputs, coinControl, reserveChangeKey)) {
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, strFailReason);
|
throw JSONRPCError(RPC_WALLET_ERROR, strFailReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2414,7 +2414,7 @@ bool CWallet::SignTransaction(CMutableTransaction &tx)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, bool overrideEstimatedFeeRate, const CFeeRate& specificFeeRate, int& nChangePosInOut, std::string& strFailReason, bool includeWatching, bool lockUnspents, const std::set<int>& setSubtractFeeFromOutputs, bool keepReserveKey, const CTxDestination& destChange)
|
bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nChangePosInOut, std::string& strFailReason, bool lockUnspents, const std::set<int>& setSubtractFeeFromOutputs, CCoinControl coinControl, bool keepReserveKey)
|
||||||
{
|
{
|
||||||
std::vector<CRecipient> vecSend;
|
std::vector<CRecipient> vecSend;
|
||||||
|
|
||||||
|
@ -2426,12 +2426,7 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, bool ov
|
||||||
vecSend.push_back(recipient);
|
vecSend.push_back(recipient);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCoinControl coinControl;
|
|
||||||
coinControl.destChange = destChange;
|
|
||||||
coinControl.fAllowOtherInputs = true;
|
coinControl.fAllowOtherInputs = true;
|
||||||
coinControl.fAllowWatchOnly = includeWatching;
|
|
||||||
coinControl.fOverrideFeeRate = overrideEstimatedFeeRate;
|
|
||||||
coinControl.nFeeRate = specificFeeRate;
|
|
||||||
|
|
||||||
BOOST_FOREACH(const CTxIn& txin, tx.vin)
|
BOOST_FOREACH(const CTxIn& txin, tx.vin)
|
||||||
coinControl.Select(txin.prevout);
|
coinControl.Select(txin.prevout);
|
||||||
|
|
|
@ -935,7 +935,7 @@ public:
|
||||||
* Insert additional inputs into the transaction by
|
* Insert additional inputs into the transaction by
|
||||||
* calling CreateTransaction();
|
* calling CreateTransaction();
|
||||||
*/
|
*/
|
||||||
bool FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, bool overrideEstimatedFeeRate, const CFeeRate& specificFeeRate, int& nChangePosInOut, std::string& strFailReason, bool includeWatching, bool lockUnspents, const std::set<int>& setSubtractFeeFromOutputs, bool keepReserveKey = true, const CTxDestination& destChange = CNoDestination());
|
bool FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nChangePosInOut, std::string& strFailReason, bool lockUnspents, const std::set<int>& setSubtractFeeFromOutputs, CCoinControl, bool keepReserveKey = true);
|
||||||
bool SignTransaction(CMutableTransaction& tx);
|
bool SignTransaction(CMutableTransaction& tx);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue