88from embit .liquid .descriptor import LDescriptor
99from flask_babel import lazy_gettext as _
1010
11+ from cryptoadvance .specter .device import Device
12+
1113from ..key import Key
1214from ..managers .wallet_manager import WalletManager
1315from ..server_endpoints import flash
@@ -58,8 +60,36 @@ def __init__(self, wallet_json, specter, device_manager=None):
5860 self .unknown_cosigners ,
5961 self .unknown_cosigners_types ,
6062 ) = self .parse_signers (device_manager .devices , self .cosigners_types )
63+ try :
64+ self .check_chain (specter .node )
65+ except Exception as e :
66+ logger .exception (e )
67+ raise SpecterError (f"Invalid chain: { e } " )
6168 self .wallet_type = "multisig" if self .descriptor .is_basic_multisig else "simple"
6269
70+ def check_chain (self , node ):
71+
72+ cosigner : Device
73+ for cosigner in self .cosigners :
74+
75+ key_chain_list = [key .is_testnet for key in cosigner .keys ]
76+ logger .debug (key_chain_list )
77+ if node .is_testnet not in key_chain_list :
78+ raise SpecterError (
79+ f"The device { cosigner } does not have any key for the chain { node .chain } !"
80+ )
81+ for key , label in self .unknown_cosigners :
82+ if key .is_testnet != node .is_testnet :
83+ raise SpecterError (
84+ f"The device { label } has at least one key for the chain { key .metadata ['chain' ] } whereas your node is on the chain: { node .chain } !"
85+ )
86+ key : Key
87+ for key in self .keys :
88+ if key .is_testnet != node .is_testnet :
89+ raise SpecterError (
90+ f"The key { key } belongs to the chain { key .metadata ['chain' ] } but your node is on the chain { node .chain } !"
91+ )
92+
6393 def check_descriptor (self ):
6494 # Sparrow fix: if all keys have None as allowed derivation - set allowed derivation to [0, None]
6595 if all (
@@ -86,6 +116,15 @@ def check_descriptor(self):
86116 )
87117
88118 def parse_signers (self , devices , cosigners_types ):
119+ """returns:
120+ * keys:
121+ * keys which are already existing in the device_manager
122+ * keys:[<cryptoadvance.specter.key.Key object at 0x7fda8451e0e0>]
123+ # cosigners:
124+ * [<cryptoadvance.specter.devices.generic.GenericDevice object at 0x7fda8451fcd0>]
125+ # unknown_cosigners:[(<cryptoadvance.specter.key.Key object at 0x7fda8451e830>, 'Signer - K'), (<cryptoadvance.specter.key.Key object at 0x7fda94235570>, 'Signer - Tired no WP')]
126+
127+ """
89128 keys = []
90129 cosigners = []
91130 unknown_cosigners = []
@@ -119,7 +158,11 @@ def parse_signers(self, devices, cosigners_types):
119158 unknown_cosigners_types .append ("other" )
120159 else :
121160 unknown_cosigners_types .append (cosigners_types [i ]["type" ])
122-
161+ logger .debug ("parse_signers returning:" )
162+ logger .debug (f"keys:{ keys } " )
163+ logger .debug (f"cosigners:{ cosigners } " )
164+ logger .debug (f"unknown_cosigners:{ unknown_cosigners } " )
165+ logger .debug (f"unknown_cosigners_types:{ unknown_cosigners_types } " )
123166 return (keys , cosigners , unknown_cosigners , unknown_cosigners_types )
124167
125168 def create_nonexisting_signers (self , device_manager , request_form ):
0 commit comments