mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-28 16:36:04 +01:00
Merge bitcoin/bitcoin#28492: RPC: descriptorprocesspsbt returns hex encoded tx if complete
a99e9e655adoc: add release note (ismaelsadeeq)2b4edf889atest: check `descriptorprocesspsbt` return hex encoded tx (ismaelsadeeq)c405207a18rpc: `descriptorprocesspsbt` return hex encoded tx (ismaelsadeeq) Pull request description: Coming from [#28414 comment](https://github.com/bitcoin/bitcoin/pull/28414#pullrequestreview-1618684391) Same thing also for `descriptorprocesspsbt`. Before this PR `descriptorprocesspsbt` returns a boolean `complete` which indicates that the psbt is final, users then have to call `finalizepsbt` to get the hex encoded network transaction. In this PR if the psbt is complete the return object also has the hex encoded network transaction ready for broadcast with `sendrawtransaction`. This save users calling `finalizepsbt` with the descriptor, if it is already complete. ACKs for top commit: achow101: ACKa99e9e655apinheadmz: ACKa99e9e655aishaanam: ACKa99e9e655aTree-SHA512: c3f1b1391d4df05216c463127cd593f8703840430a99febb54890bc66fadabf9d9530860605f347ec54c1694019173247a0e7a9eb879d3cbb420f9e8d9839b75
This commit is contained in:
@@ -978,17 +978,22 @@ class PSBTTest(BitcoinTestFramework):
|
||||
test_psbt_input_keys(decoded['inputs'][0], ['witness_utxo', 'non_witness_utxo'])
|
||||
|
||||
# Test that the psbt is not finalized and does not have bip32_derivs unless specified
|
||||
psbt = self.nodes[2].descriptorprocesspsbt(psbt=psbt, descriptors=[descriptor], sighashtype="ALL", bip32derivs=True, finalize=False)["psbt"]
|
||||
decoded = self.nodes[2].decodepsbt(psbt)
|
||||
processed_psbt = self.nodes[2].descriptorprocesspsbt(psbt=psbt, descriptors=[descriptor], sighashtype="ALL", bip32derivs=True, finalize=False)
|
||||
decoded = self.nodes[2].decodepsbt(processed_psbt['psbt'])
|
||||
test_psbt_input_keys(decoded['inputs'][0], ['witness_utxo', 'non_witness_utxo', 'partial_signatures', 'bip32_derivs'])
|
||||
|
||||
psbt = self.nodes[2].descriptorprocesspsbt(psbt=psbt, descriptors=[descriptor], sighashtype="ALL", bip32derivs=False, finalize=True)["psbt"]
|
||||
decoded = self.nodes[2].decodepsbt(psbt)
|
||||
# If psbt not finalized, test that result does not have hex
|
||||
assert "hex" not in processed_psbt
|
||||
|
||||
processed_psbt = self.nodes[2].descriptorprocesspsbt(psbt=psbt, descriptors=[descriptor], sighashtype="ALL", bip32derivs=False, finalize=True)
|
||||
decoded = self.nodes[2].decodepsbt(processed_psbt['psbt'])
|
||||
test_psbt_input_keys(decoded['inputs'][0], ['witness_utxo', 'non_witness_utxo', 'final_scriptwitness'])
|
||||
|
||||
# Test psbt is complete
|
||||
assert_equal(processed_psbt['complete'], True)
|
||||
|
||||
# Broadcast transaction
|
||||
rawtx = self.nodes[2].finalizepsbt(psbt)["hex"]
|
||||
self.nodes[2].sendrawtransaction(rawtx)
|
||||
self.nodes[2].sendrawtransaction(processed_psbt['hex'])
|
||||
|
||||
self.log.info("Test descriptorprocesspsbt raises if an invalid sighashtype is passed")
|
||||
assert_raises_rpc_error(-8, "all is not a valid sighash parameter.", self.nodes[2].descriptorprocesspsbt, psbt, [descriptor], sighashtype="all")
|
||||
|
||||
Reference in New Issue
Block a user