diff options
author | Gregory Sanders <gsanders87@gmail.com> | 2017-04-28 17:22:37 -0400 |
---|---|---|
committer | Jonas Schnelli <dev@jonasschnelli.ch> | 2017-05-31 10:57:16 +0200 |
commit | 18476423fba5d2cadd2b0973e425a6ebedeb66a4 (patch) | |
tree | 05608fb0fb49463e9aa652b1e590ed70222aac24 | |
parent | ae479bc45bfdfb33e7f1293391db5b9f81b3ce17 (diff) |
[Wallet] unset change position when there is no change on exact match
-rwxr-xr-x | qa/rpc-tests/fundrawtransaction.py | 5 | ||||
-rw-r--r-- | src/wallet/wallet.cpp | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/qa/rpc-tests/fundrawtransaction.py b/qa/rpc-tests/fundrawtransaction.py index 8d2bc73c0c..cdea390e22 100755 --- a/qa/rpc-tests/fundrawtransaction.py +++ b/qa/rpc-tests/fundrawtransaction.py @@ -54,6 +54,11 @@ class RawTransactionsTest(BitcoinTestFramework): self.nodes[0].generate(121) self.sync_all() + # ensure that setting changePosition in fundraw with an exact match is handled properly + rawmatch = self.nodes[2].createrawtransaction([], {self.nodes[2].getnewaddress():50}) + rawmatch = self.nodes[2].fundrawtransaction(rawmatch, {"changePosition":1, "subtractFeeFromOutputs":[0]}) + assert_equal(rawmatch["changepos"], -1) + watchonly_address = self.nodes[0].getnewaddress() watchonly_pubkey = self.nodes[0].validateaddress(watchonly_address)["pubkey"] watchonly_amount = Decimal(200) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 1b59c3cd80..3e93a56d56 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2587,9 +2587,10 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend, CWalletTx& wt vector<CTxOut>::iterator position = txNew.vout.begin()+nChangePosInOut; txNew.vout.insert(position, newTxOut); } - } - else + } else { reservekey.ReturnKey(); + nChangePosInOut = -1; + } // Fill vin // |