aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Barbosa <joao.paulo.barbosa@gmail.com>2018-01-15 16:10:13 +0000
committerJoão Barbosa <joao.paulo.barbosa@gmail.com>2018-01-24 15:52:05 +0000
commit31dbd5af4863d73c3215355ec5cf85bde2ddc5d8 (patch)
treec016eae3dcae0487243260c97342651d2a90a4a0
parent95941396fff81f60d75fc8cca70716b26efe820e (diff)
downloadbitcoin-31dbd5af4863d73c3215355ec5cf85bde2ddc5d8.tar.xz
[wallet] Add change type to CCoinControl
-rw-r--r--src/wallet/coincontrol.h4
-rw-r--r--src/wallet/wallet.cpp8
-rw-r--r--src/wallet/wallet.h2
3 files changed, 9 insertions, 5 deletions
diff --git a/src/wallet/coincontrol.h b/src/wallet/coincontrol.h
index e1afa2de03..458e770e03 100644
--- a/src/wallet/coincontrol.h
+++ b/src/wallet/coincontrol.h
@@ -16,7 +16,10 @@
class CCoinControl
{
public:
+ //! Custom change destination, if not set an address is generated
CTxDestination destChange;
+ //! Custom change type, ignored if destChange is set, defaults to g_change_type
+ OutputType change_type;
//! If false, allows unselected inputs, but requires all selected inputs be used
bool fAllowOtherInputs;
//! Includes watch only addresses which match the ISMINE_WATCH_SOLVABLE criteria
@@ -40,6 +43,7 @@ public:
void SetNull()
{
destChange = CNoDestination();
+ change_type = g_change_type;
fAllowOtherInputs = false;
fAllowWatchOnly = false;
setSelected.clear();
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index 7fb26900e1..07a23ce249 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -2674,11 +2674,11 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nC
return true;
}
-OutputType CWallet::TransactionChangeType(const std::vector<CRecipient>& vecSend)
+OutputType CWallet::TransactionChangeType(OutputType change_type, const std::vector<CRecipient>& vecSend)
{
// If -changetype is specified, always use that change type.
- if (g_change_type != OUTPUT_TYPE_NONE) {
- return g_change_type;
+ if (change_type != OUTPUT_TYPE_NONE) {
+ return change_type;
}
// if g_address_type is legacy, use legacy address as change (even
@@ -2797,7 +2797,7 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletT
return false;
}
- const OutputType change_type = TransactionChangeType(vecSend);
+ const OutputType change_type = TransactionChangeType(coin_control.change_type, vecSend);
LearnRelatedScripts(vchPubKey, change_type);
scriptChange = GetScriptForDestination(GetDestinationForKey(vchPubKey, change_type));
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h
index e8f536634e..a4684c2935 100644
--- a/src/wallet/wallet.h
+++ b/src/wallet/wallet.h
@@ -965,7 +965,7 @@ public:
CAmount GetLegacyBalance(const isminefilter& filter, int minDepth, const std::string* account) const;
CAmount GetAvailableBalance(const CCoinControl* coinControl = nullptr) const;
- OutputType TransactionChangeType(const std::vector<CRecipient>& vecSend);
+ OutputType TransactionChangeType(OutputType change_type, const std::vector<CRecipient>& vecSend);
/**
* Insert additional inputs into the transaction by