diff --git a/test/functional/wallet_silentpayments_receiving.py b/test/functional/wallet_silentpayments_receiving.py index efaeb76231..a804d4fe61 100755 --- a/test/functional/wallet_silentpayments_receiving.py +++ b/test/functional/wallet_silentpayments_receiving.py @@ -358,6 +358,68 @@ class SilentPaymentsReceivingTest(BitcoinTestFramework): vin["vout"] == input["vout"] for vin in raw_tx["vin"] for input in inputs) + + def test_sendrawtransaction(self): + """Test silent payments with raw transaction""" + self.log.info("Testing silent payments raw transaction") + + node = self.nodes[0] + node.createwallet("input_sender", silent_payments=True) + node.createwallet("sp_receiver", silent_payments=True) + + sender = node.get_wallet_rpc("input_sender") + receiver = node.get_wallet_rpc("sp_receiver") + + # Fund sender wallet + self.generatetoaddress(node, 1, sender.getnewaddress()) + self.generate(node, 100) + + sp_addr = receiver.getnewaddress(address_type="silent-payments") + + # Setup inputs + unspent = sender.listunspent() + inputs = [{"txid": utxo["txid"], "vout": utxo["vout"]} for utxo in unspent] + + raw_tx = sender.createrawtransaction(inputs, {sp_addr: 10}) + funded_tx = sender.fundrawtransaction(raw_tx) + signed_tx = sender.signrawtransactionwithwallet(funded_tx["hex"]) + txid = sender.sendrawtransaction(signed_tx["hex"]) #JSONRPCException: scriptpubkey (-26) when using silent-payments address + assert txid + + self.generate(node, 1) + assert_approx(receiver.getbalance(), 10, 0.001) + + def test_mixed_output_types(self): + """Test SP transactions with mixed output types (P2TR, P2WPKH, SP)""" + self.log.info("Testing mixed output types in single transaction") + + node = self.nodes[0] + node.createwallet("mixed_sender", silent_payments=True) + node.createwallet("mixed_receiver", silent_payments=True) + + sender = node.get_wallet_rpc("mixed_sender") + receiver = node.get_wallet_rpc("mixed_receiver") + + # Fund sender + self.generatetoaddress(node, 101, sender.getnewaddress()) + + # Get different address types + p2wpkh_addr = sender.getnewaddress(address_type="bech32") + p2tr_addr = sender.getnewaddress(address_type="bech32m") + sp_addr = receiver.getnewaddress(address_type="silent-payments") + + # Send to multiple output types in one transaction + outputs = { + p2wpkh_addr: 5, + p2tr_addr: 7, + sp_addr: 3 + } + + txid = sender.send(outputs)["txid"] # timeout when output contains sp address + self.generate(node, 1) + + # Verify receiver got the SP output + assert_approx(receiver.getbalance(), 3, 0.001) def run_test(self): self.def_wallet = self.nodes[0].get_wallet_rpc(self.default_wallet_name) @@ -374,7 +436,8 @@ class SilentPaymentsReceivingTest(BitcoinTestFramework): self.test_backup_and_restore() self.test_getaddressinfo() self.test_coincontrol() - + self.test_sendrawtransaction() + self.test_mixed_output_types() if __name__ == '__main__':