In wallet-related functional tests we often want to send funds to an address and use the resulting (non-change) UTXO directly after as input for another transaction. Doing that is currently tedious, as it involves finding the index part of the outpoint manually by calling helpers like find_vout_for_address or find_output first. This results in two different txid/vout variables which then again have to be combined to a single dictionary {"txid": ..., "vout": ...} in order to be specified as input for RPCs like createrawtransaction or createpsbt. For example:
txid1 = node1.sendtoaddress(addr1, value1)
vout1 = find_vout_for_address(node1, txid1, addr1)
txid2 = node2.sendtoaddress(addr2, value2)
vout2 = find_vout_for_address(node2, txid2, addr2)
node.createrawtransaction([{'txid': txid1, 'vout': vout1}, {'txid': txid2, 'vout': vout2}], .....)
This PR introduces a helper create_outpoints to immediately return the outpoint as
UTXO dictionary in the common format, making the tests more readable and avoiding unnecessary duplication:
utxo1 = self.create_outpoints(node1, outputs=[{addr1: value1}])[0]
utxo2 = self.create_outpoints(node2, outputs=[{addr2: value2}])[0]
node.createrawtransaction([utxo1, utxo2], .....)
Tests are switched to work with UTXO-objects rather than two individual txid/vout variables accordingly.
The find_output helper is removed, as it seems generally a bad idea to search for an outpoint only based on the output value. If that's really ever needed in the future, it makes probably more sense to add it as an additional parameter to find_vout_of_address. Note that find_output supported specifying a block-hash for where to look for the transaction (being passed on to the getrawtransaction RPC). This seems to be unneeded, as txids are always unique and for the only test that used that parameter (rpc_psbt.py) there was no observed difference in run-time, so it was not reintroduced in the new helper.
There are still some find_vout_of_address calls remaining, used for detecting change outputs or for whenever the sending happens via sendrawtransaction instead, so this PR tackles not all, but the most common case.