You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
5.1 KiB
101 lines
5.1 KiB
6 years ago
|
#!/usr/bin/env python3
|
||
|
# Copyright (c) 2018 The Bitcoin Core developers
|
||
|
# Distributed under the MIT software license, see the accompanying
|
||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||
|
"""Test createwallet arguments.
|
||
|
"""
|
||
|
|
||
|
from test_framework.test_framework import BitcoinTestFramework
|
||
|
from test_framework.util import (
|
||
|
assert_equal,
|
||
|
assert_raises_rpc_error,
|
||
|
)
|
||
|
|
||
|
class CreateWalletTest(BitcoinTestFramework):
|
||
|
def set_test_params(self):
|
||
|
self.setup_clean_chain = False
|
||
|
self.num_nodes = 1
|
||
|
self.supports_cli = True
|
||
|
|
||
|
def skip_test_if_missing_module(self):
|
||
|
self.skip_if_no_wallet()
|
||
|
|
||
|
def run_test(self):
|
||
|
node = self.nodes[0]
|
||
|
node.generate(1) # Leave IBD for sethdseed
|
||
|
|
||
|
self.nodes[0].createwallet(wallet_name='w0')
|
||
|
w0 = node.get_wallet_rpc('w0')
|
||
|
address1 = w0.getnewaddress()
|
||
|
|
||
|
self.log.info("Test disableprivatekeys creation.")
|
||
|
self.nodes[0].createwallet(wallet_name='w1', disable_private_keys=True)
|
||
|
w1 = node.get_wallet_rpc('w1')
|
||
|
assert_raises_rpc_error(-4, "Error: Private keys are disabled for this wallet", w1.getnewaddress)
|
||
|
assert_raises_rpc_error(-4, "Error: Private keys are disabled for this wallet", w1.getrawchangeaddress)
|
||
|
w1.importpubkey(w0.getaddressinfo(address1)['pubkey'])
|
||
|
|
||
|
self.log.info('Test that private keys cannot be imported')
|
||
|
addr = w0.getnewaddress('', 'legacy')
|
||
|
privkey = w0.dumpprivkey(addr)
|
||
|
assert_raises_rpc_error(-4, 'Cannot import private keys to a wallet with private keys disabled', w1.importprivkey, privkey)
|
||
|
result = w1.importmulti([{'scriptPubKey': {'address': addr}, 'timestamp': 'now', 'keys': [privkey]}])
|
||
|
assert(not result[0]['success'])
|
||
|
assert('warning' not in result[0])
|
||
|
assert_equal(result[0]['error']['code'], -4)
|
||
|
assert_equal(result[0]['error']['message'], 'Cannot import private keys to a wallet with private keys disabled')
|
||
|
|
||
|
self.log.info("Test blank creation with private keys disabled.")
|
||
|
self.nodes[0].createwallet(wallet_name='w2', disable_private_keys=True, blank=True)
|
||
|
w2 = node.get_wallet_rpc('w2')
|
||
|
assert_raises_rpc_error(-4, "Error: Private keys are disabled for this wallet", w2.getnewaddress)
|
||
|
assert_raises_rpc_error(-4, "Error: Private keys are disabled for this wallet", w2.getrawchangeaddress)
|
||
|
w2.importpubkey(w0.getaddressinfo(address1)['pubkey'])
|
||
|
|
||
|
self.log.info("Test blank creation with private keys enabled.")
|
||
|
self.nodes[0].createwallet(wallet_name='w3', disable_private_keys=False, blank=True)
|
||
|
w3 = node.get_wallet_rpc('w3')
|
||
|
assert_equal(w3.getwalletinfo()['keypoolsize'], 0)
|
||
|
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getnewaddress)
|
||
|
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getrawchangeaddress)
|
||
|
# Import private key
|
||
|
w3.importprivkey(w0.dumpprivkey(address1))
|
||
|
# Imported private keys are currently ignored by the keypool
|
||
|
assert_equal(w3.getwalletinfo()['keypoolsize'], 0)
|
||
|
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w3.getnewaddress)
|
||
|
# Set the seed
|
||
|
w3.sethdseed()
|
||
|
assert_equal(w3.getwalletinfo()['keypoolsize'], 1)
|
||
|
w3.getnewaddress()
|
||
|
w3.getrawchangeaddress()
|
||
|
|
||
|
self.log.info("Test blank creation with privkeys enabled and then encryption")
|
||
|
self.nodes[0].createwallet(wallet_name='w4', disable_private_keys=False, blank=True)
|
||
|
w4 = node.get_wallet_rpc('w4')
|
||
|
assert_equal(w4.getwalletinfo()['keypoolsize'], 0)
|
||
|
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w4.getnewaddress)
|
||
|
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w4.getrawchangeaddress)
|
||
|
# Encrypt the wallet. Nothing should change about the keypool
|
||
|
w4.encryptwallet('pass')
|
||
|
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w4.getnewaddress)
|
||
|
assert_raises_rpc_error(-4, "Error: This wallet has no available keys", w4.getrawchangeaddress)
|
||
|
# Now set a seed and it should work. Wallet should also be encrypted
|
||
|
w4.walletpassphrase('pass', 2)
|
||
|
w4.sethdseed()
|
||
|
w4.getnewaddress()
|
||
|
w4.getrawchangeaddress()
|
||
|
|
||
|
self.log.info("Test blank creation with privkeys disabled and then encryption")
|
||
|
self.nodes[0].createwallet(wallet_name='w5', disable_private_keys=True, blank=True)
|
||
|
w5 = node.get_wallet_rpc('w5')
|
||
|
assert_equal(w5.getwalletinfo()['keypoolsize'], 0)
|
||
|
assert_raises_rpc_error(-4, "Error: Private keys are disabled for this wallet", w5.getnewaddress)
|
||
|
assert_raises_rpc_error(-4, "Error: Private keys are disabled for this wallet", w5.getrawchangeaddress)
|
||
|
# Encrypt the wallet
|
||
|
w5.encryptwallet('pass')
|
||
|
assert_raises_rpc_error(-4, "Error: Private keys are disabled for this wallet", w5.getnewaddress)
|
||
|
assert_raises_rpc_error(-4, "Error: Private keys are disabled for this wallet", w5.getrawchangeaddress)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
CreateWalletTest().main()
|