@@ -3657,11 +3657,12 @@ def import_address(self, address: str) -> str:
36573657 def delete_address (self , address : str ) -> None :
36583658 if not self .db .has_imported_address (address ):
36593659 return
3660- if len (self .get_addresses ()) <= 1 :
3661- raise UserFacingException (_ ('Cannot delete last remaining address from wallet' ))
3662- transactions_to_remove = set () # only referred to by this address
3663- transactions_new = set () # txs that are not only referred to by address
36643660 with self .lock :
3661+ if len (self .get_addresses ()) <= 1 : # check this inside lock
3662+ raise UserFacingException (_ ('Cannot delete last remaining address from wallet' ))
3663+ transactions_to_remove = set () # only referred to by this address
3664+ transactions_new = set () # txs that are not only referred to by address
3665+ # rm txs from history
36653666 for addr in self .db .get_history ():
36663667 details = self .adb .get_address_history (addr ).items ()
36673668 if addr == address :
@@ -3674,26 +3675,30 @@ def delete_address(self, address: str) -> None:
36743675 self .db .remove_addr_history (address )
36753676 for tx_hash in transactions_to_remove :
36763677 self .adb ._remove_transaction (tx_hash )
3677- self .set_label (address , None )
3678- if req := self .get_request_by_addr (address ):
3679- self .delete_request (req .get_id ())
3680- self .set_frozen_state_of_addresses ([address ], False , write_to_disk = False )
3681- pubkey = self .get_public_key (address )
3682- self .db .remove_imported_address (address )
3683- if pubkey :
3684- # delete key iff no other address uses it (e.g. p2pkh and p2wpkh for same key)
3685- for txin_type in bitcoin .WIF_SCRIPT_TYPES .keys ():
3686- try :
3687- addr2 = bitcoin .pubkey_to_address (txin_type , pubkey )
3688- except NotImplementedError :
3689- pass
3678+ # rm label for addr
3679+ # TODO rm label for txids?
3680+ self .set_label (address , None )
3681+ # rm receive requests for addr
3682+ if req := self .get_request_by_addr (address ):
3683+ self .delete_request (req .get_id ())
3684+ self .set_frozen_state_of_addresses ([address ], False , write_to_disk = False )
3685+ # rm corresponding key from keystore
3686+ pubkey = self .get_public_key (address )
3687+ self .db .remove_imported_address (address )
3688+ if pubkey :
3689+ # delete key iff no other address uses it (e.g. p2pkh and p2wpkh for same key)
3690+ for txin_type in bitcoin .WIF_SCRIPT_TYPES .keys ():
3691+ try :
3692+ addr2 = bitcoin .pubkey_to_address (txin_type , pubkey )
3693+ except NotImplementedError :
3694+ pass
3695+ else :
3696+ if self .db .has_imported_address (addr2 ):
3697+ break
36903698 else :
3691- if self .db .has_imported_address (addr2 ):
3692- break
3693- else :
3694- self .keystore .delete_imported_key (pubkey )
3695- self .save_keystore ()
3696- self .save_db ()
3699+ self .keystore .delete_imported_key (pubkey )
3700+ self .save_keystore ()
3701+ self .save_db ()
36973702
36983703 def get_change_addresses_for_new_transaction (self , * args , ** kwargs ) -> List [str ]:
36993704 # for an imported wallet, if all "change addresses" are already used,
0 commit comments