diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3034,6 +3034,7 @@ } } else { reservekey.ReturnKey(); + nChangePosInOut = -1; } // Fill vin diff --git a/test/functional/rpc_fundrawtransaction.py b/test/functional/rpc_fundrawtransaction.py --- a/test/functional/rpc_fundrawtransaction.py +++ b/test/functional/rpc_fundrawtransaction.py @@ -49,6 +49,13 @@ 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"]