mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-22 20:58:09 +02:00
[rpc] fundrawtransaction, walletcreatefundedpsbt lock manually selected coins
Previously only automatically selected coins were locked when lockUnspents is set. It now also locks selected coins.
This commit is contained in:
@@ -103,7 +103,16 @@ class PSBTTest(BitcoinTestFramework):
|
||||
final_tx = self.nodes[0].finalizepsbt(signed_tx)['hex']
|
||||
self.nodes[0].sendrawtransaction(final_tx)
|
||||
|
||||
# Get pubkeys
|
||||
# Manually selected inputs can be locked:
|
||||
assert_equal(len(self.nodes[0].listlockunspent()), 0)
|
||||
utxo1 = self.nodes[0].listunspent()[0]
|
||||
psbtx1 = self.nodes[0].walletcreatefundedpsbt([{"txid": utxo1['txid'], "vout": utxo1['vout']}], {self.nodes[2].getnewaddress():1}, 0,{"lockUnspents": True})["psbt"]
|
||||
assert_equal(len(self.nodes[0].listlockunspent()), 1)
|
||||
|
||||
# Locks are ignored for manually selected inputs
|
||||
self.nodes[0].walletcreatefundedpsbt([{"txid": utxo1['txid'], "vout": utxo1['vout']}], {self.nodes[2].getnewaddress():1}, 0)
|
||||
|
||||
# Create p2sh, p2wpkh, and p2wsh addresses
|
||||
pubkey0 = self.nodes[0].getaddressinfo(self.nodes[0].getnewaddress())['pubkey']
|
||||
pubkey1 = self.nodes[1].getaddressinfo(self.nodes[1].getnewaddress())['pubkey']
|
||||
pubkey2 = self.nodes[2].getaddressinfo(self.nodes[2].getnewaddress())['pubkey']
|
||||
|
||||
@@ -136,11 +136,19 @@ class WalletTest(BitcoinTestFramework):
|
||||
self.nodes[2].lockunspent, False,
|
||||
[{"txid": unspent_0["txid"], "vout": 999}])
|
||||
|
||||
# An output should be unlocked when spent
|
||||
# The lock on a manually selected output is ignored
|
||||
unspent_0 = self.nodes[1].listunspent()[0]
|
||||
self.nodes[1].lockunspent(False, [unspent_0])
|
||||
tx = self.nodes[1].createrawtransaction([unspent_0], { self.nodes[1].getnewaddress() : 1 })
|
||||
tx = self.nodes[1].fundrawtransaction(tx)['hex']
|
||||
self.nodes[1].fundrawtransaction(tx,{"lockUnspents": True})
|
||||
|
||||
# fundrawtransaction can lock an input
|
||||
self.nodes[1].lockunspent(True, [unspent_0])
|
||||
assert_equal(len(self.nodes[1].listlockunspent()), 0)
|
||||
tx = self.nodes[1].fundrawtransaction(tx,{"lockUnspents": True})['hex']
|
||||
assert_equal(len(self.nodes[1].listlockunspent()), 1)
|
||||
|
||||
# Send transaction
|
||||
tx = self.nodes[1].signrawtransactionwithwallet(tx)["hex"]
|
||||
self.nodes[1].sendrawtransaction(tx)
|
||||
assert_equal(len(self.nodes[1].listlockunspent()), 0)
|
||||
|
||||
Reference in New Issue
Block a user