Test pubkey import to keypool
This commit is contained in:
parent
513719c5f8
commit
9e1551b9ce
1 changed files with 87 additions and 1 deletions
|
@ -625,7 +625,6 @@ class ImportMultiTest(BitcoinTestFramework):
|
||||||
ismine=False,
|
ismine=False,
|
||||||
iswatchonly=False)
|
iswatchonly=False)
|
||||||
|
|
||||||
|
|
||||||
# Import pubkeys with key origin info
|
# Import pubkeys with key origin info
|
||||||
self.log.info("Addresses should have hd keypath and master key id after import with key origin")
|
self.log.info("Addresses should have hd keypath and master key id after import with key origin")
|
||||||
pub_addr = self.nodes[1].getnewaddress()
|
pub_addr = self.nodes[1].getnewaddress()
|
||||||
|
@ -691,5 +690,92 @@ class ImportMultiTest(BitcoinTestFramework):
|
||||||
assert 'hdmasterfingerprint' not in pub_import_info
|
assert 'hdmasterfingerprint' not in pub_import_info
|
||||||
assert 'hdkeypath' not in pub_import_info
|
assert 'hdkeypath' not in pub_import_info
|
||||||
|
|
||||||
|
# Import some public keys to the keypool of a no privkey wallet
|
||||||
|
self.log.info("Adding pubkey to keypool of disableprivkey wallet")
|
||||||
|
self.nodes[1].createwallet(wallet_name="noprivkeys", disable_private_keys=True)
|
||||||
|
wrpc = self.nodes[1].get_wallet_rpc("noprivkeys")
|
||||||
|
|
||||||
|
addr1 = self.nodes[0].getnewaddress()
|
||||||
|
addr2 = self.nodes[0].getnewaddress()
|
||||||
|
pub1 = self.nodes[0].getaddressinfo(addr1)['pubkey']
|
||||||
|
pub2 = self.nodes[0].getaddressinfo(addr2)['pubkey']
|
||||||
|
result = wrpc.importmulti(
|
||||||
|
[{
|
||||||
|
'desc': 'wpkh(' + pub1 + ')',
|
||||||
|
'keypool': True,
|
||||||
|
"timestamp": "now",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'desc': 'wpkh(' + pub2 + ')',
|
||||||
|
'keypool': True,
|
||||||
|
"timestamp": "now",
|
||||||
|
}]
|
||||||
|
)
|
||||||
|
assert result[0]['success']
|
||||||
|
assert result[1]['success']
|
||||||
|
assert_equal(wrpc.getwalletinfo()["keypoolsize"], 2)
|
||||||
|
newaddr1 = wrpc.getnewaddress()
|
||||||
|
assert_equal(addr1, newaddr1)
|
||||||
|
newaddr2 = wrpc.getnewaddress()
|
||||||
|
assert_equal(addr2, newaddr2)
|
||||||
|
|
||||||
|
# Import some public keys to the internal keypool of a no privkey wallet
|
||||||
|
self.log.info("Adding pubkey to internal keypool of disableprivkey wallet")
|
||||||
|
addr1 = self.nodes[0].getnewaddress()
|
||||||
|
addr2 = self.nodes[0].getnewaddress()
|
||||||
|
pub1 = self.nodes[0].getaddressinfo(addr1)['pubkey']
|
||||||
|
pub2 = self.nodes[0].getaddressinfo(addr2)['pubkey']
|
||||||
|
result = wrpc.importmulti(
|
||||||
|
[{
|
||||||
|
'desc': 'wpkh(' + pub1 + ')',
|
||||||
|
'keypool': True,
|
||||||
|
'internal': True,
|
||||||
|
"timestamp": "now",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'desc': 'wpkh(' + pub2 + ')',
|
||||||
|
'keypool': True,
|
||||||
|
'internal': True,
|
||||||
|
"timestamp": "now",
|
||||||
|
}]
|
||||||
|
)
|
||||||
|
assert result[0]['success']
|
||||||
|
assert result[1]['success']
|
||||||
|
assert_equal(wrpc.getwalletinfo()["keypoolsize_hd_internal"], 2)
|
||||||
|
newaddr1 = wrpc.getrawchangeaddress()
|
||||||
|
assert_equal(addr1, newaddr1)
|
||||||
|
newaddr2 = wrpc.getrawchangeaddress()
|
||||||
|
assert_equal(addr2, newaddr2)
|
||||||
|
|
||||||
|
# Import a multisig and make sure the keys don't go into the keypool
|
||||||
|
self.log.info('Imported scripts with pubkeys shoud not have their pubkeys go into the keypool')
|
||||||
|
addr1 = self.nodes[0].getnewaddress()
|
||||||
|
addr2 = self.nodes[0].getnewaddress()
|
||||||
|
pub1 = self.nodes[0].getaddressinfo(addr1)['pubkey']
|
||||||
|
pub2 = self.nodes[0].getaddressinfo(addr2)['pubkey']
|
||||||
|
result = wrpc.importmulti(
|
||||||
|
[{
|
||||||
|
'desc': 'wsh(multi(2,' + pub1 + ',' + pub2 + '))',
|
||||||
|
'keypool': True,
|
||||||
|
"timestamp": "now",
|
||||||
|
}]
|
||||||
|
)
|
||||||
|
assert result[0]['success']
|
||||||
|
assert_equal(wrpc.getwalletinfo()["keypoolsize"], 0)
|
||||||
|
|
||||||
|
# Cannot import those pubkeys to keypool of wallet with privkeys
|
||||||
|
self.log.info("Pubkeys cannot be added to the keypool of a wallet with private keys")
|
||||||
|
wrpc = self.nodes[1].get_wallet_rpc("")
|
||||||
|
assert wrpc.getwalletinfo()['private_keys_enabled']
|
||||||
|
result = wrpc.importmulti(
|
||||||
|
[{
|
||||||
|
'desc': 'wpkh(' + pub1 + ')',
|
||||||
|
'keypool': True,
|
||||||
|
"timestamp": "now",
|
||||||
|
}]
|
||||||
|
)
|
||||||
|
assert_equal(result[0]['error']['code'], -8)
|
||||||
|
assert_equal(result[0]['error']['message'], "Keys can only be imported to the keypool when private keys are disabled")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
ImportMultiTest().main()
|
ImportMultiTest().main()
|
||||||
|
|
Loading…
Reference in a new issue