allow user to change gap limit
This commit is contained in:
@@ -549,17 +549,11 @@ class ElectrumWindow(QMainWindow):
|
|||||||
self.update_receive_tab()
|
self.update_receive_tab()
|
||||||
|
|
||||||
|
|
||||||
def create_new_address(self):
|
|
||||||
if self.question( _("Warning:\nThis will create an address beyond your current gap limit.") + "\n" + _("Are you sure?")):
|
|
||||||
self.wallet.create_new_address(False)
|
|
||||||
self.update_receive_tab()
|
|
||||||
|
|
||||||
def add_receive_buttons(self):
|
def add_receive_buttons(self):
|
||||||
|
|
||||||
l = self.receive_list
|
l = self.receive_list
|
||||||
hbox = self.receive_buttons_hbox
|
hbox = self.receive_buttons_hbox
|
||||||
|
|
||||||
self.new_address_button = EnterButton(_("New"), self.create_new_address)
|
self.new_address_button = EnterButton(_("New"), self.change_gap_limit_dialog)
|
||||||
hbox.addWidget(self.new_address_button)
|
hbox.addWidget(self.new_address_button)
|
||||||
self.new_address_button.setHidden(not self.wallet.expert_mode)
|
self.new_address_button.setHidden(not self.wallet.expert_mode)
|
||||||
|
|
||||||
@@ -632,7 +626,7 @@ class ElectrumWindow(QMainWindow):
|
|||||||
self.receive_buttons_hbox = hbox
|
self.receive_buttons_hbox = hbox
|
||||||
#self.add_receive_buttons()
|
#self.add_receive_buttons()
|
||||||
|
|
||||||
self.new_address_button = EnterButton(_("New"), self.create_new_address)
|
self.new_address_button = EnterButton(_("New"), self.change_gap_limit_dialog)
|
||||||
self.new_address_button.setHidden(not self.wallet.expert_mode)
|
self.new_address_button.setHidden(not self.wallet.expert_mode)
|
||||||
hbox.addWidget(self.new_address_button)
|
hbox.addWidget(self.new_address_button)
|
||||||
hbox.addStretch(1)
|
hbox.addStretch(1)
|
||||||
@@ -974,6 +968,42 @@ class ElectrumWindow(QMainWindow):
|
|||||||
if not d.exec_(): return
|
if not d.exec_(): return
|
||||||
return unicode(pw.text())
|
return unicode(pw.text())
|
||||||
|
|
||||||
|
|
||||||
|
def change_gap_limit_dialog(self):
|
||||||
|
d = QDialog(self)
|
||||||
|
d.setModal(1)
|
||||||
|
|
||||||
|
vbox = QVBoxLayout()
|
||||||
|
|
||||||
|
msg = _('In order to create more addresses, you need to raise your gap limit.') + '\n' \
|
||||||
|
+ _('Your current gap limit is ') + '%d'%self.wallet.gap_limit + '\n' \
|
||||||
|
+ _('The minimum for this wallet is: ') + '%d'%self.wallet.min_acceptable_gap() + '\n'
|
||||||
|
|
||||||
|
vbox.addWidget(QLabel(msg))
|
||||||
|
|
||||||
|
grid = QGridLayout()
|
||||||
|
grid.setSpacing(8)
|
||||||
|
grid.addWidget(QLabel(_('New gap limit: ')), 1, 0)
|
||||||
|
|
||||||
|
e = QLineEdit()
|
||||||
|
grid.addWidget(e, 1, 1)
|
||||||
|
vbox.addLayout(grid)
|
||||||
|
|
||||||
|
vbox.addLayout(ok_cancel_buttons(d))
|
||||||
|
d.setLayout(vbox)
|
||||||
|
|
||||||
|
if not d.exec_(): return
|
||||||
|
try:
|
||||||
|
n = int(e.text())
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.wallet.change_gap_limit(n)
|
||||||
|
self.update_receive_tab()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def change_password_dialog( wallet, parent=None ):
|
def change_password_dialog( wallet, parent=None ):
|
||||||
|
|
||||||
|
|||||||
@@ -494,6 +494,42 @@ class Wallet:
|
|||||||
return address
|
return address
|
||||||
|
|
||||||
|
|
||||||
|
def change_gap_limit(self, value):
|
||||||
|
if value >= self.gap_limit:
|
||||||
|
self.gap_limit = value
|
||||||
|
self.save()
|
||||||
|
return True
|
||||||
|
|
||||||
|
elif value >= self.min_acceptable_gap():
|
||||||
|
k = self.num_unused_trailing_addresses()
|
||||||
|
n = len(self.addresses) - k + value
|
||||||
|
self.addresses = self.addresses[0:n]
|
||||||
|
self.gap_limit = value
|
||||||
|
self.save()
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def num_unused_trailing_addresses(self):
|
||||||
|
k = 0
|
||||||
|
for a in self.addresses[::-1]:
|
||||||
|
if self.history.get(a):break
|
||||||
|
k = k + 1
|
||||||
|
return k
|
||||||
|
|
||||||
|
def min_acceptable_gap(self):
|
||||||
|
# fixme: this assumes wallet is synchronized
|
||||||
|
n = 0
|
||||||
|
nmax = 0
|
||||||
|
k = self.num_unused_trailing_addresses()
|
||||||
|
for a in self.addresses[0:-k]:
|
||||||
|
if self.history.get(a):
|
||||||
|
n = 0
|
||||||
|
else:
|
||||||
|
n += 1
|
||||||
|
if n > nmax: nmax = n
|
||||||
|
return nmax
|
||||||
|
|
||||||
|
|
||||||
def synchronize(self):
|
def synchronize(self):
|
||||||
if not self.master_public_key:
|
if not self.master_public_key:
|
||||||
@@ -574,6 +610,7 @@ class Wallet:
|
|||||||
'frozen_addresses':self.frozen_addresses,
|
'frozen_addresses':self.frozen_addresses,
|
||||||
'prioritized_addresses':self.prioritized_addresses,
|
'prioritized_addresses':self.prioritized_addresses,
|
||||||
'expert_mode':self.expert_mode,
|
'expert_mode':self.expert_mode,
|
||||||
|
'gap_limit':self.gap_limit,
|
||||||
}
|
}
|
||||||
f = open(self.path,"w")
|
f = open(self.path,"w")
|
||||||
f.write( repr(s) )
|
f.write( repr(s) )
|
||||||
@@ -613,6 +650,7 @@ class Wallet:
|
|||||||
self.frozen_addresses = d.get('frozen_addresses',[])
|
self.frozen_addresses = d.get('frozen_addresses',[])
|
||||||
self.prioritized_addresses = d.get('prioritized_addresses',[])
|
self.prioritized_addresses = d.get('prioritized_addresses',[])
|
||||||
self.expert_mode = d.get('expert_mode',False)
|
self.expert_mode = d.get('expert_mode',False)
|
||||||
|
self.gap_limit = d.get('gap_limit',5)
|
||||||
except:
|
except:
|
||||||
raise BaseException("cannot read wallet file")
|
raise BaseException("cannot read wallet file")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user