mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-23 17:47:31 +00:00
hardware wallets: wizard no longer requests xpub at path "m"
This was done to calculate the bip32 root fingerprint but it broke the digitalbitbox. The keystore already had a different way to get the root fingerprint for existing wallets, specifically handling this case; the code in base_wizard used when creating new wallets was duplicating that code originally and was then forgotten to be updated. Now these codepaths are unified. closes #5816
This commit is contained in:
parent
68dad21fb4
commit
d3fd87ebd0
3 changed files with 13 additions and 8 deletions
|
@ -418,21 +418,23 @@ class BaseWizard(Logger):
|
||||||
|
|
||||||
def on_hw_derivation(self, name, device_info, derivation, xtype):
|
def on_hw_derivation(self, name, device_info, derivation, xtype):
|
||||||
from .keystore import hardware_keystore
|
from .keystore import hardware_keystore
|
||||||
|
devmgr = self.plugins.device_manager
|
||||||
try:
|
try:
|
||||||
xpub = self.plugin.get_xpub(device_info.device.id_, derivation, xtype, self)
|
xpub = self.plugin.get_xpub(device_info.device.id_, derivation, xtype, self)
|
||||||
root_xpub = self.plugin.get_xpub(device_info.device.id_, 'm', 'standard', self)
|
client = devmgr.client_by_id(device_info.device.id_)
|
||||||
|
if not client: raise Exception("failed to find client for device id")
|
||||||
|
root_fingerprint = client.request_root_fingerprint_from_device()
|
||||||
except ScriptTypeNotSupported:
|
except ScriptTypeNotSupported:
|
||||||
raise # this is handled in derivation_dialog
|
raise # this is handled in derivation_dialog
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
self.logger.exception('')
|
self.logger.exception('')
|
||||||
self.show_error(e)
|
self.show_error(e)
|
||||||
return
|
return
|
||||||
xfp = BIP32Node.from_xkey(root_xpub).calc_fingerprint_of_this_node().hex().lower()
|
|
||||||
d = {
|
d = {
|
||||||
'type': 'hardware',
|
'type': 'hardware',
|
||||||
'hw_type': name,
|
'hw_type': name,
|
||||||
'derivation': derivation,
|
'derivation': derivation,
|
||||||
'root_fingerprint': xfp,
|
'root_fingerprint': root_fingerprint,
|
||||||
'xpub': xpub,
|
'xpub': xpub,
|
||||||
'label': device_info.label,
|
'label': device_info.label,
|
||||||
}
|
}
|
||||||
|
|
|
@ -709,11 +709,7 @@ class Hardware_KeyStore(KeyStore, Xpub):
|
||||||
def opportunistically_fill_in_missing_info_from_device(self, client: 'HardwareClientBase'):
|
def opportunistically_fill_in_missing_info_from_device(self, client: 'HardwareClientBase'):
|
||||||
assert client is not None
|
assert client is not None
|
||||||
if self._root_fingerprint is None:
|
if self._root_fingerprint is None:
|
||||||
# digitalbitbox (at least) does not reveal xpubs corresponding to unhardened paths
|
self._root_fingerprint = client.request_root_fingerprint_from_device()
|
||||||
# so ask for a direct child, and read out fingerprint from that:
|
|
||||||
child_of_root_xpub = client.get_xpub("m/0'", xtype='standard')
|
|
||||||
root_fingerprint = BIP32Node.from_xkey(child_of_root_xpub).fingerprint.hex().lower()
|
|
||||||
self._root_fingerprint = root_fingerprint
|
|
||||||
self.is_requesting_to_be_rewritten_to_wallet_file = True
|
self.is_requesting_to_be_rewritten_to_wallet_file = True
|
||||||
if self.label != client.label():
|
if self.label != client.label():
|
||||||
self.label = client.label()
|
self.label = client.label()
|
||||||
|
|
|
@ -175,6 +175,13 @@ class HardwareClientBase:
|
||||||
def get_xpub(self, bip32_path: str, xtype) -> str:
|
def get_xpub(self, bip32_path: str, xtype) -> str:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def request_root_fingerprint_from_device(self) -> str:
|
||||||
|
# digitalbitbox (at least) does not reveal xpubs corresponding to unhardened paths
|
||||||
|
# so ask for a direct child, and read out fingerprint from that:
|
||||||
|
child_of_root_xpub = self.get_xpub("m/0'", xtype='standard')
|
||||||
|
root_fingerprint = BIP32Node.from_xkey(child_of_root_xpub).fingerprint.hex().lower()
|
||||||
|
return root_fingerprint
|
||||||
|
|
||||||
|
|
||||||
def is_any_tx_output_on_change_branch(tx: PartialTransaction) -> bool:
|
def is_any_tx_output_on_change_branch(tx: PartialTransaction) -> bool:
|
||||||
return any([txout.is_change for txout in tx.outputs()])
|
return any([txout.is_change for txout in tx.outputs()])
|
||||||
|
|
Loading…
Add table
Reference in a new issue