(self)
| 23 | self.skip_if_no_wallet() |
| 24 | |
| 25 | def run_test(self): |
| 26 | node = self.nodes[0] |
| 27 | self.generate(node, 1) # Leave IBD for sethdseed |
| 28 | |
| 29 | self.nodes[0].createwallet(wallet_name='w0') |
| 30 | w0 = node.get_wallet_rpc('w0') |
| 31 | address1 = w0.getnewaddress() |
| 32 | |
| 33 | self.log.info("Test disableprivatekeys creation.") |
| 34 | self.nodes[0].createwallet(wallet_name='w1', disable_private_keys=True) |
| 35 | w1 = node.get_wallet_rpc('w1') |
| 36 | assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w1.getnewaddress) |
| 37 | assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w1.getrawchangeaddress) |
| 38 | w1.importpubkey(w0.getaddressinfo(address1)['pubkey']) |
| 39 | |
| 40 | self.log.info('Test that private keys cannot be imported') |
| 41 | eckey = ECKey() |
| 42 | eckey.generate() |
| 43 | privkey = bytes_to_wif(eckey.get_bytes()) |
| 44 | assert_raises_rpc_error(-4, 'Cannot import private keys to a wallet with private keys disabled', w1.importprivkey, privkey) |
| 45 | if self.options.descriptors: |
| 46 | result = w1.importdescriptors([{'desc': descsum_create('wpkh(' + privkey + ')'), 'timestamp': 'now'}]) |
| 47 | else: |
| 48 | result = w1.importmulti([{'scriptPubKey': {'address': key_to_p2wpkh(eckey.get_pubkey().get_bytes())}, 'timestamp': 'now', 'keys': [privkey]}]) |
| 49 | assert not result[0]['success'] |
| 50 | assert 'warning' not in result[0] |
| 51 | assert_equal(result[0]['error']['code'], -4) |
| 52 | assert_equal(result[0]['error']['message'], 'Cannot import private keys to a wallet with private keys disabled') |
| 53 | |
| 54 | self.log.info("Test blank creation with private keys disabled.") |
| 55 | self.nodes[0].createwallet(wallet_name='w2', disable_private_keys=True, blank=True) |
| 56 | w2 = node.get_wallet_rpc('w2') |
| 57 | assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w2.getnewaddress) |
| 58 | assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w2.getrawchangeaddress) |
| 59 | w2.importpubkey(w0.getaddressinfo(address1)['pubkey']) |
| 60 | |
| 61 | self.log.info("Test blank creation with private keys enabled.") |
| 62 | self.nodes[0].createwallet(wallet_name='w3', disable_private_keys=False, blank=True) |
| 63 | w3 = node.get_wallet_rpc('w3') |
| 64 | assert_equal(w3.getwalletinfo()['keypoolsize'], 0) |
| 65 | assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getnewaddress) |
| 66 | assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getrawchangeaddress) |
| 67 | # Import private key |
| 68 | w3.importprivkey(generate_wif_key()) |
| 69 | # Imported private keys are currently ignored by the keypool |
| 70 | assert_equal(w3.getwalletinfo()['keypoolsize'], 0) |
| 71 | assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getnewaddress) |
| 72 | # Set the seed |
| 73 | if self.options.descriptors: |
| 74 | w3.importdescriptors([{ |
| 75 | 'desc': descsum_create('wpkh(tprv8ZgxMBicQKsPcwuZGKp8TeWppSuLMiLe2d9PupB14QpPeQsqoj3LneJLhGHH13xESfvASyd4EFLJvLrG8b7DrLxEuV7hpF9uUc6XruKA1Wq/0h/*)'), |
| 76 | 'timestamp': 'now', |
| 77 | 'active': True |
| 78 | }, |
| 79 | { |
| 80 | 'desc': descsum_create('wpkh(tprv8ZgxMBicQKsPcwuZGKp8TeWppSuLMiLe2d9PupB14QpPeQsqoj3LneJLhGHH13xESfvASyd4EFLJvLrG8b7DrLxEuV7hpF9uUc6XruKA1Wq/1h/*)'), |
| 81 | 'timestamp': 'now', |
| 82 | 'active': True, |
nothing calls this directly
no test coverage detected