simplify previous commit
This commit is contained in:
@@ -200,7 +200,7 @@ class AddressList(MyTreeView):
|
|||||||
def place_text_on_clipboard(self, text):
|
def place_text_on_clipboard(self, text):
|
||||||
if is_address(text):
|
if is_address(text):
|
||||||
try:
|
try:
|
||||||
self.wallet.raise_if_cannot_rederive_address(text)
|
self.wallet.check_address(text)
|
||||||
except InternalAddressCorruption as e:
|
except InternalAddressCorruption as e:
|
||||||
self.parent.show_error(str(e))
|
self.parent.show_error(str(e))
|
||||||
raise
|
raise
|
||||||
|
|||||||
@@ -2612,20 +2612,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
|||||||
text = str(keys_e.toPlainText())
|
text = str(keys_e.toPlainText())
|
||||||
return keystore.get_private_keys(text)
|
return keystore.get_private_keys(text)
|
||||||
|
|
||||||
def on_address(text):
|
|
||||||
# set text color
|
|
||||||
addr = get_address()
|
|
||||||
ss = (ColorScheme.DEFAULT if addr else ColorScheme.RED).as_stylesheet()
|
|
||||||
address_e.setStyleSheet(ss)
|
|
||||||
# if addr looks to be ours, make sure we can re-derive it
|
|
||||||
if addr and self.wallet.is_mine(addr):
|
|
||||||
try:
|
|
||||||
self.wallet.raise_if_cannot_rederive_address(addr)
|
|
||||||
except InternalAddressCorruption as e:
|
|
||||||
self.show_error(str(e))
|
|
||||||
raise
|
|
||||||
|
|
||||||
f = lambda: button.setEnabled(get_address() is not None and get_pk() is not None)
|
f = lambda: button.setEnabled(get_address() is not None and get_pk() is not None)
|
||||||
|
on_address = lambda text: address_e.setStyleSheet((ColorScheme.DEFAULT if get_address() else ColorScheme.RED).as_stylesheet())
|
||||||
keys_e.textChanged.connect(f)
|
keys_e.textChanged.connect(f)
|
||||||
address_e.textChanged.connect(f)
|
address_e.textChanged.connect(f)
|
||||||
address_e.textChanged.connect(on_address)
|
address_e.textChanged.connect(on_address)
|
||||||
@@ -2633,6 +2621,12 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
|||||||
if not d.exec_():
|
if not d.exec_():
|
||||||
return
|
return
|
||||||
# user pressed "sweep"
|
# user pressed "sweep"
|
||||||
|
addr = get_address()
|
||||||
|
try:
|
||||||
|
self.wallet.check_address(addr)
|
||||||
|
except InternalAddressCorruption as e:
|
||||||
|
self.show_error(str(e))
|
||||||
|
raise
|
||||||
try:
|
try:
|
||||||
coins, keypairs = sweep_preparations(get_pk(), self.network)
|
coins, keypairs = sweep_preparations(get_pk(), self.network)
|
||||||
except Exception as e: # FIXME too broad...
|
except Exception as e: # FIXME too broad...
|
||||||
@@ -2642,7 +2636,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
|||||||
self.do_clear()
|
self.do_clear()
|
||||||
self.tx_external_keypairs = keypairs
|
self.tx_external_keypairs = keypairs
|
||||||
self.spend_coins(coins)
|
self.spend_coins(coins)
|
||||||
self.payto_e.setText(get_address())
|
self.payto_e.setText(addr)
|
||||||
self.spend_max()
|
self.spend_max()
|
||||||
self.payto_e.setFrozen(True)
|
self.payto_e.setFrozen(True)
|
||||||
self.amount_e.setFrozen(True)
|
self.amount_e.setFrozen(True)
|
||||||
|
|||||||
@@ -152,8 +152,8 @@ class CannotBumpFee(Exception): pass
|
|||||||
|
|
||||||
class InternalAddressCorruption(Exception):
|
class InternalAddressCorruption(Exception):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return _("Internal address database inconsistency detected. "
|
return _("Wallet file corruption detected. "
|
||||||
"You should restore from seed.")
|
"Please restore your wallet from seed, and compare the addresses in both files")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -641,7 +641,7 @@ class Abstract_Wallet(AddressSynchronizer):
|
|||||||
for addr in change_addrs:
|
for addr in change_addrs:
|
||||||
# note that change addresses are not necessarily ismine
|
# note that change addresses are not necessarily ismine
|
||||||
# in which case this is a no-op
|
# in which case this is a no-op
|
||||||
self.raise_if_cannot_rederive_address(addr)
|
self.check_address(addr)
|
||||||
|
|
||||||
# Fee estimator
|
# Fee estimator
|
||||||
if fixed_fee is None:
|
if fixed_fee is None:
|
||||||
@@ -897,17 +897,16 @@ class Abstract_Wallet(AddressSynchronizer):
|
|||||||
continue
|
continue
|
||||||
return tx
|
return tx
|
||||||
|
|
||||||
@profiler
|
|
||||||
def try_detecting_internal_addresses_corruption(self):
|
def try_detecting_internal_addresses_corruption(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def raise_if_cannot_rederive_address(self, addr):
|
def check_address(self, addr):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def try_rederiving_returned_address(func):
|
def check_returned_address(func):
|
||||||
def wrapper(self, *args, **kwargs):
|
def wrapper(self, *args, **kwargs):
|
||||||
addr = func(self, *args, **kwargs)
|
addr = func(self, *args, **kwargs)
|
||||||
self.raise_if_cannot_rederive_address(addr)
|
self.check_address(addr)
|
||||||
return addr
|
return addr
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
@@ -917,13 +916,13 @@ class Abstract_Wallet(AddressSynchronizer):
|
|||||||
return [addr for addr in domain if not self.history.get(addr)
|
return [addr for addr in domain if not self.history.get(addr)
|
||||||
and addr not in self.receive_requests.keys()]
|
and addr not in self.receive_requests.keys()]
|
||||||
|
|
||||||
@try_rederiving_returned_address
|
@check_returned_address
|
||||||
def get_unused_address(self):
|
def get_unused_address(self):
|
||||||
addrs = self.get_unused_addresses()
|
addrs = self.get_unused_addresses()
|
||||||
if addrs:
|
if addrs:
|
||||||
return addrs[0]
|
return addrs[0]
|
||||||
|
|
||||||
@try_rederiving_returned_address
|
@check_returned_address
|
||||||
def get_receiving_address(self):
|
def get_receiving_address(self):
|
||||||
# always return an address
|
# always return an address
|
||||||
domain = self.get_receiving_addresses()
|
domain = self.get_receiving_addresses()
|
||||||
@@ -1500,16 +1499,12 @@ class Deterministic_Wallet(Abstract_Wallet):
|
|||||||
addresses_rand = addresses_all[10:]
|
addresses_rand = addresses_all[10:]
|
||||||
addresses_sample2 = random.sample(addresses_rand, min(len(addresses_rand), 10))
|
addresses_sample2 = random.sample(addresses_rand, min(len(addresses_rand), 10))
|
||||||
for addr_found in addresses_sample1 + addresses_sample2:
|
for addr_found in addresses_sample1 + addresses_sample2:
|
||||||
self.raise_if_cannot_rederive_address(addr_found)
|
self.check_address(addr_found)
|
||||||
|
|
||||||
def raise_if_cannot_rederive_address(self, addr):
|
def check_address(self, addr):
|
||||||
if not addr:
|
if addr and self.is_mine(addr):
|
||||||
return
|
if addr != self.derive_address(*self.get_address_index(addr)):
|
||||||
if not self.is_mine(addr):
|
raise InternalAddressCorruption()
|
||||||
return
|
|
||||||
addr_derived = self.derive_address(*self.get_address_index(addr))
|
|
||||||
if addr != addr_derived:
|
|
||||||
raise InternalAddressCorruption()
|
|
||||||
|
|
||||||
def get_seed(self, password):
|
def get_seed(self, password):
|
||||||
return self.keystore.get_seed(password)
|
return self.keystore.get_seed(password)
|
||||||
@@ -1566,8 +1561,7 @@ class Deterministic_Wallet(Abstract_Wallet):
|
|||||||
|
|
||||||
def derive_address(self, for_change, n):
|
def derive_address(self, for_change, n):
|
||||||
x = self.derive_pubkeys(for_change, n)
|
x = self.derive_pubkeys(for_change, n)
|
||||||
address = self.pubkeys_to_address(x)
|
return self.pubkeys_to_address(x)
|
||||||
return address
|
|
||||||
|
|
||||||
def create_new_address(self, for_change=False):
|
def create_new_address(self, for_change=False):
|
||||||
assert type(for_change) is bool
|
assert type(for_change) is bool
|
||||||
|
|||||||
Reference in New Issue
Block a user