diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py index 6e12f6c9641ce3..32a2667facf533 100755 --- a/test/functional/test_framework/test_node.py +++ b/test/functional/test_framework/test_node.py @@ -812,10 +812,10 @@ def __getattr__(self, name): def createwallet_passthrough(self, *args, **kwargs): return self.__getattr__("createwallet")(*args, **kwargs) - def createwallet(self, wallet_name, disable_private_keys=None, blank=None, passphrase='', avoid_reuse=None, descriptors=None, load_on_startup=None, external_signer=None): + def createwallet(self, wallet_name, disable_private_keys=None, blank=None, passphrase='', avoid_reuse=None, descriptors=None, load_on_startup=None, external_signer=None, silent_payment=None): if descriptors is None: descriptors = self.descriptors - return self.__getattr__('createwallet')(wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors, load_on_startup, external_signer) + return self.__getattr__('createwallet')(wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors, load_on_startup, external_signer, silent_payment) def importprivkey(self, privkey, label=None, rescan=None): wallet_info = self.getwalletinfo() diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py index db04bb8bdb3ff1..3af937765e9867 100755 --- a/test/functional/test_runner.py +++ b/test/functional/test_runner.py @@ -194,6 +194,7 @@ 'wallet_avoid_mixing_output_types.py --descriptors', 'mempool_reorg.py', 'p2p_block_sync.py', + 'wallet_silentpayments_receiving.py --descriptors', 'wallet_createwallet.py --legacy-wallet', 'wallet_createwallet.py --usecli', 'wallet_createwallet.py --descriptors', diff --git a/test/functional/wallet_silentpayments_receiving.py b/test/functional/wallet_silentpayments_receiving.py new file mode 100755 index 00000000000000..4c14fcb928de54 --- /dev/null +++ b/test/functional/wallet_silentpayments_receiving.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import ( + assert_equal, + assert_raises_rpc_error, +) + + +class SilentPaymentsReceivingTest(BitcoinTestFramework): + def add_options(self, parser): + self.add_wallet_options(parser, legacy=False) + + def set_test_params(self): + self.setup_clean_chain = True + self.num_nodes = 1 + + def skip_test_if_missing_module(self): + self.skip_if_no_wallet() + self.skip_if_no_sqlite() + + def test_createwallet(self): + self.log.info("Check createwallet silent payments option") + + self.nodes[0].createwallet(wallet_name="sp", silent_payment=True) + wallet = self.nodes[0].get_wallet_rpc("sp") + addr = wallet.getnewaddress(address_type="silent-payment") + assert addr.startswith("sp") + addr_again = wallet.getnewaddress(address_type="silent-payment") + assert_equal(addr, addr_again) + + self.nodes[0].createwallet(wallet_name="non_sp", silent_payment=False) + wallet = self.nodes[0].get_wallet_rpc("non_sp") + assert_raises_rpc_error(-12, "Error: No silent-payment addresses available", wallet.getnewaddress, address_type="silent-payment") + + if self.is_bdb_compiled(): + assert_raises_rpc_error(-4, "Wallet with silent payments must also be a descriptor wallet", self.nodes[0].createwallet, wallet_name="legacy_sp", descriptors=False, silent_payment=True) + + self.nodes[0].createwallet(wallet_name="legacy_sp", descriptors=False) + wallet = self.nodes[0].get_wallet_rpc("legacy_sp") + assert_raises_rpc_error(-12, "Error: No silent-payment addresses available", wallet.getnewaddress, address_type="silent-payment") + + def run_test(self): + self.test_createwallet() + + +if __name__ == '__main__': + SilentPaymentsReceivingTest().main()