Changeset View
Changeset View
Standalone View
Standalone View
test/functional/wallet_keypool.py
Show All 15 Lines | class KeyPoolTest(BitcoinTestFramework): | ||||
def run_test(self): | def run_test(self): | ||||
nodes = self.nodes | nodes = self.nodes | ||||
addr_before_encrypting = nodes[0].getnewaddress() | addr_before_encrypting = nodes[0].getnewaddress() | ||||
addr_before_encrypting_data = nodes[ | addr_before_encrypting_data = nodes[ | ||||
0].getaddressinfo(addr_before_encrypting) | 0].getaddressinfo(addr_before_encrypting) | ||||
wallet_info_old = nodes[0].getwalletinfo() | wallet_info_old = nodes[0].getwalletinfo() | ||||
assert_equal(wallet_info_old['hdseedid'], | assert_equal(wallet_info_old['hdseedid'], | ||||
wallet_info_old['hdmasterkeyid']) | wallet_info_old['hdmasterkeyid']) | ||||
assert(addr_before_encrypting_data[ | assert addr_before_encrypting_data[ | ||||
'hdseedid'] == wallet_info_old['hdseedid']) | 'hdseedid'] == wallet_info_old['hdseedid'] | ||||
# Encrypt wallet and wait to terminate | # Encrypt wallet and wait to terminate | ||||
nodes[0].node_encrypt_wallet('test') | nodes[0].node_encrypt_wallet('test') | ||||
# Restart node 0 | # Restart node 0 | ||||
self.start_node(0) | self.start_node(0) | ||||
# Keep creating keys | # Keep creating keys | ||||
addr = nodes[0].getnewaddress() | addr = nodes[0].getnewaddress() | ||||
addr_data = nodes[0].getaddressinfo(addr) | addr_data = nodes[0].getaddressinfo(addr) | ||||
wallet_info = nodes[0].getwalletinfo() | wallet_info = nodes[0].getwalletinfo() | ||||
assert_equal(wallet_info['hdseedid'], wallet_info['hdmasterkeyid']) | assert_equal(wallet_info['hdseedid'], wallet_info['hdmasterkeyid']) | ||||
assert(addr_before_encrypting_data[ | assert addr_before_encrypting_data[ | ||||
'hdseedid'] != wallet_info['hdseedid']) | 'hdseedid'] != wallet_info['hdseedid'] | ||||
assert(addr_data['hdseedid'] == wallet_info['hdseedid']) | assert addr_data['hdseedid'] == wallet_info['hdseedid'] | ||||
assert_raises_rpc_error( | assert_raises_rpc_error( | ||||
-12, "Error: Keypool ran out, please call keypoolrefill first", nodes[0].getnewaddress) | -12, "Error: Keypool ran out, please call keypoolrefill first", nodes[0].getnewaddress) | ||||
# put six (plus 2) new keys in the keypool (100% external-, +100% internal-keys, 1 in min) | # put six (plus 2) new keys in the keypool (100% external-, +100% internal-keys, 1 in min) | ||||
nodes[0].walletpassphrase('test', 12000) | nodes[0].walletpassphrase('test', 12000) | ||||
nodes[0].keypoolrefill(6) | nodes[0].keypoolrefill(6) | ||||
nodes[0].walletlock() | nodes[0].walletlock() | ||||
wi = nodes[0].getwalletinfo() | wi = nodes[0].getwalletinfo() | ||||
Show All 14 Lines | def run_test(self): | ||||
# drain the external keys | # drain the external keys | ||||
addr.add(nodes[0].getnewaddress()) | addr.add(nodes[0].getnewaddress()) | ||||
addr.add(nodes[0].getnewaddress()) | addr.add(nodes[0].getnewaddress()) | ||||
addr.add(nodes[0].getnewaddress()) | addr.add(nodes[0].getnewaddress()) | ||||
addr.add(nodes[0].getnewaddress()) | addr.add(nodes[0].getnewaddress()) | ||||
addr.add(nodes[0].getnewaddress()) | addr.add(nodes[0].getnewaddress()) | ||||
addr.add(nodes[0].getnewaddress()) | addr.add(nodes[0].getnewaddress()) | ||||
assert(len(addr) == 6) | assert len(addr) == 6 | ||||
# the next one should fail | # the next one should fail | ||||
assert_raises_rpc_error( | assert_raises_rpc_error( | ||||
-12, "Error: Keypool ran out, please call keypoolrefill first", nodes[0].getnewaddress) | -12, "Error: Keypool ran out, please call keypoolrefill first", nodes[0].getnewaddress) | ||||
# refill keypool with three new addresses | # refill keypool with three new addresses | ||||
nodes[0].walletpassphrase('test', 1) | nodes[0].walletpassphrase('test', 1) | ||||
nodes[0].keypoolrefill(3) | nodes[0].keypoolrefill(3) | ||||
Show All 19 Lines |