[Wallet] Add an option to keep the change address key, true by default
This commit is contained in:
parent
9c9af5ab2d
commit
9aa4e6a6c2
3 changed files with 13 additions and 3 deletions
|
@ -2496,6 +2496,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
|||
" \"changePosition\" (numeric, optional, default random) The index of the change output\n"
|
||||
" \"includeWatching\" (boolean, optional, default false) Also select inputs which are watch only\n"
|
||||
" \"lockUnspents\" (boolean, optional, default false) Lock selected unspent outputs\n"
|
||||
" \"reserveChangeKey\" (boolean, optional, default true) Reserves the change output key from the keypool\n"
|
||||
" \"feeRate\" (numeric, optional, default not set: makes wallet determine the fee) Set a specific feerate (" + CURRENCY_UNIT + " per KB)\n"
|
||||
" \"subtractFeeFromOutputs\" (array, optional) A json array of integers.\n"
|
||||
" The fee will be equally deducted from the amount of each specified output.\n"
|
||||
|
@ -2528,6 +2529,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
|||
int changePosition = -1;
|
||||
bool includeWatching = false;
|
||||
bool lockUnspents = false;
|
||||
bool reserveChangeKey = true;
|
||||
CFeeRate feeRate = CFeeRate(0);
|
||||
bool overrideEstimatedFeerate = false;
|
||||
UniValue subtractFeeFromOutputs;
|
||||
|
@ -2549,6 +2551,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
|||
{"changePosition", UniValueType(UniValue::VNUM)},
|
||||
{"includeWatching", UniValueType(UniValue::VBOOL)},
|
||||
{"lockUnspents", UniValueType(UniValue::VBOOL)},
|
||||
{"reserveChangeKey", UniValueType(UniValue::VBOOL)},
|
||||
{"feeRate", UniValueType()}, // will be checked below
|
||||
{"subtractFeeFromOutputs", UniValueType(UniValue::VARR)},
|
||||
},
|
||||
|
@ -2572,6 +2575,9 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
|||
if (options.exists("lockUnspents"))
|
||||
lockUnspents = options["lockUnspents"].get_bool();
|
||||
|
||||
if (options.exists("reserveChangeKey"))
|
||||
reserveChangeKey = options["reserveChangeKey"].get_bool();
|
||||
|
||||
if (options.exists("feeRate"))
|
||||
{
|
||||
feeRate = CFeeRate(AmountFromValue(options["feeRate"]));
|
||||
|
@ -2608,7 +2614,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
|||
CAmount nFeeOut;
|
||||
string strFailReason;
|
||||
|
||||
if(!pwalletMain->FundTransaction(tx, nFeeOut, overrideEstimatedFeerate, feeRate, changePosition, strFailReason, includeWatching, lockUnspents, setSubtractFeeFromOutputs, changeAddress))
|
||||
if(!pwalletMain->FundTransaction(tx, nFeeOut, overrideEstimatedFeerate, feeRate, changePosition, strFailReason, includeWatching, lockUnspents, setSubtractFeeFromOutputs, reserveChangeKey, changeAddress))
|
||||
throw JSONRPCError(RPC_INTERNAL_ERROR, strFailReason);
|
||||
|
||||
UniValue result(UniValue::VOBJ);
|
||||
|
|
|
@ -2192,7 +2192,7 @@ bool CWallet::SelectCoins(const vector<COutput>& vAvailableCoins, const CAmount&
|
|||
return res;
|
||||
}
|
||||
|
||||
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, const CTxDestination& destChange)
|
||||
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)
|
||||
{
|
||||
vector<CRecipient> vecSend;
|
||||
|
||||
|
@ -2241,6 +2241,10 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, bool ov
|
|||
}
|
||||
}
|
||||
|
||||
// optionally keep the change output key
|
||||
if (keepReserveKey)
|
||||
reservekey.KeepKey();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -780,7 +780,7 @@ public:
|
|||
* Insert additional inputs into the transaction by
|
||||
* 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, const CTxDestination& destChange = CNoDestination());
|
||||
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());
|
||||
|
||||
/**
|
||||
* Create a new transaction paying the recipients with a set of coins
|
||||
|
|
Loading…
Reference in a new issue