1
0

wallet: disable_keystore() not to destroy get_key_origin_info()

This commit is contained in:
SomberNight
2025-08-15 17:29:55 +00:00
parent f025a75356
commit cd63be233b
3 changed files with 30 additions and 9 deletions

View File

@@ -525,3 +525,10 @@ class KeyOriginInfo:
xfp.extend(self.path)
return xfp
def __eq__(self, other) -> bool:
if not isinstance(other, KeyOriginInfo):
return False
return self.serialize() == other.serialize()
def __repr__(self) -> str:
return f"<KeyOriginInfo {self.to_string()}>"

View File

@@ -643,7 +643,7 @@ class BIP32_KeyStore(Xpub, Deterministic_KeyStore):
return BIP32_KeyStore({
'xpub': self.xpub,
'root_fingerprint': self.get_root_fingerprint(),
'derivation_prefix': self.get_derivation_prefix(),
'derivation': self.get_derivation_prefix(),
})
def format_seed(self, seed):
@@ -903,7 +903,7 @@ class Hardware_KeyStore(Xpub, KeyStore):
return BIP32_KeyStore({
'xpub': self.xpub,
'root_fingerprint': self.get_root_fingerprint(),
'derivation_prefix': self.get_derivation_prefix(),
'derivation': self.get_derivation_prefix(),
})
def set_label(self, label: Optional[str]) -> None:

View File

@@ -10,6 +10,7 @@ from electrum.daemon import Daemon
from electrum.wallet import Abstract_Wallet
from electrum import util
from electrum import slip39
from electrum.bip32 import KeyOriginInfo
from . import ElectrumTestCase
from .test_wallet_vertical import UNICODE_HORROR
@@ -169,13 +170,20 @@ class KeystoreWizardTestCase(WizardTestCase):
wallet = Daemon._load_wallet(wallet_path, password=None, config=self.config)
return wallet
def _sanity_checks_after_disabling_keystore(self, *, ks: 'KeyStore', xpub: str) -> None:
def _sanity_checks_after_disabling_keystore(
self,
*,
ks: 'KeyStore',
xpub: str,
key_origin_info: KeyOriginInfo,
) -> None:
self.assertTrue(ks.is_watching_only())
self.assertTrue(ks.type in ('bip32', 'old'))
self.assertFalse(ks.has_seed())
self.assertEqual(ks.get_master_public_key(), xpub)
if isinstance(ks, BIP32_KeyStore):
self.assertEqual(ks.xprv, None)
self.assertEqual(ks.get_key_origin_info(), key_origin_info)
async def test_haveseed_electrum(self):
w, v = self._wizard_for()
@@ -200,8 +208,9 @@ class KeystoreWizardTestCase(WizardTestCase):
self.assertEqual(myseed, wallet.get_keystore().get_seed(None))
self.assertEqual(mypassphrase, wallet.get_keystore().get_passphrase(None))
my_keyorigininfo = wallet.get_keystore().get_key_origin_info()
wallet.disable_keystore(wallet.get_keystore())
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub)
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub, key_origin_info=my_keyorigininfo)
async def test_haveseed_ext_electrum(self):
w, v = self._wizard_for()
@@ -230,8 +239,9 @@ class KeystoreWizardTestCase(WizardTestCase):
self.assertEqual(myseed, wallet.get_keystore().get_seed(None))
self.assertEqual(mypassphrase, wallet.get_keystore().get_passphrase(None))
my_keyorigininfo = wallet.get_keystore().get_key_origin_info()
wallet.disable_keystore(wallet.get_keystore())
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub)
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub, key_origin_info=my_keyorigininfo)
async def test_haveseed_electrum_oldseed(self):
w, v = self._wizard_for()
@@ -257,8 +267,9 @@ class KeystoreWizardTestCase(WizardTestCase):
self.assertEqual(myseed, wallet.get_keystore().get_seed(None))
self.assertEqual(mypassphrase, wallet.get_keystore().get_passphrase(None))
my_keyorigininfo = wallet.get_keystore().get_key_origin_info()
wallet.disable_keystore(wallet.get_keystore())
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub)
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub, key_origin_info=my_keyorigininfo)
async def test_haveseed_bip39(self):
w, v = self._wizard_for()
@@ -283,8 +294,9 @@ class KeystoreWizardTestCase(WizardTestCase):
wallet.enable_keystore(ks, ishww, None)
self.assertFalse(wallet.get_keystore().is_watching_only())
my_keyorigininfo = wallet.get_keystore().get_key_origin_info()
wallet.disable_keystore(wallet.get_keystore())
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub)
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub, key_origin_info=my_keyorigininfo)
async def test_haveseed_ext_bip39(self):
w, v = self._wizard_for()
@@ -313,8 +325,9 @@ class KeystoreWizardTestCase(WizardTestCase):
wallet.enable_keystore(ks, ishww, None)
self.assertFalse(wallet.get_keystore().is_watching_only())
my_keyorigininfo = wallet.get_keystore().get_key_origin_info()
wallet.disable_keystore(wallet.get_keystore())
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub)
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub, key_origin_info=my_keyorigininfo)
async def test_hww(self):
w, v = self._wizard_for(hww=True)
@@ -354,8 +367,9 @@ class KeystoreWizardTestCase(WizardTestCase):
self.assertFalse(wallet.get_keystore().is_watching_only())
self.assertTrue(isinstance(wallet.get_keystore(), Hardware_KeyStore))
my_keyorigininfo = wallet.get_keystore().get_key_origin_info()
wallet.disable_keystore(wallet.get_keystore())
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub)
self._sanity_checks_after_disabling_keystore(ks=wallet.get_keystore(), xpub=myxpub, key_origin_info=my_keyorigininfo)
class WalletWizardTestCase(WizardTestCase):