allow address creation beyond gap limit in GUI. fixes #512
This commit is contained in:
parent
38f5deee86
commit
b5acdab3e9
|
@ -40,6 +40,7 @@ from electrum import Transaction
|
|||
from electrum import mnemonic
|
||||
from electrum import util, bitcoin, commands, Interface, Wallet
|
||||
from electrum import SimpleConfig, Wallet, WalletStorage
|
||||
from electrum import Imported_Wallet
|
||||
|
||||
from amountedit import AmountEdit, BTCAmountEdit, MyLineEdit
|
||||
from network_dialog import NetworkDialog
|
||||
|
@ -681,7 +682,7 @@ class ElectrumWindow(QMainWindow):
|
|||
self.save_request_button.clicked.connect(self.save_payment_request)
|
||||
grid.addWidget(self.save_request_button, 3, 1)
|
||||
clear_button = QPushButton(_('New'))
|
||||
clear_button.clicked.connect(self.clear_receive_tab)
|
||||
clear_button.clicked.connect(self.new_receive_address)
|
||||
grid.addWidget(clear_button, 3, 2)
|
||||
grid.setRowStretch(4, 1)
|
||||
|
||||
|
@ -739,6 +740,22 @@ class ElectrumWindow(QMainWindow):
|
|||
self.wallet.storage.put('receive_requests', self.receive_requests)
|
||||
self.update_receive_tab()
|
||||
|
||||
def new_receive_address(self):
|
||||
domain = self.wallet.get_account_addresses(self.current_account, include_change=False)
|
||||
for addr in domain:
|
||||
if not self.wallet.address_is_old(addr) and addr not in self.receive_requests.keys():
|
||||
break
|
||||
else:
|
||||
if isinstance(self.wallet, Imported_Wallet):
|
||||
self.show_message(_('No more addresses in your wallet.'))
|
||||
return
|
||||
if not self.question(_("Warning: The next address will not be recovered automatically if you restore your wallet from seed; you may need to add it manually.\n\nThis occurs because you have too many unused addresses in your wallet. To avoid this situation, use the existing addresses first.\n\nCreate anyway?")):
|
||||
return
|
||||
addr = self.wallet.create_new_address(self.current_account, False)
|
||||
self.receive_address_e.setText(addr)
|
||||
self.receive_message_e.setText('')
|
||||
self.receive_amount_e.setAmount(None)
|
||||
|
||||
def clear_receive_tab(self):
|
||||
self.receive_requests = self.wallet.storage.get('receive_requests',{})
|
||||
domain = self.wallet.get_account_addresses(self.current_account, include_change=False)
|
||||
|
@ -746,7 +763,7 @@ class ElectrumWindow(QMainWindow):
|
|||
if not self.wallet.address_is_old(addr) and addr not in self.receive_requests.keys():
|
||||
break
|
||||
else:
|
||||
addr = ""
|
||||
addr = ''
|
||||
self.receive_address_e.setText(addr)
|
||||
self.receive_message_e.setText('')
|
||||
self.receive_amount_e.setAmount(None)
|
||||
|
|
|
@ -547,7 +547,7 @@ class Abstract_Wallet:
|
|||
|
||||
def get_account_addresses(self, a, include_change=True):
|
||||
if a is None:
|
||||
o = self.addresses(True)
|
||||
o = self.addresses(include_change)
|
||||
elif a in self.accounts:
|
||||
ac = self.accounts[a]
|
||||
o = ac.get_addresses(0)
|
||||
|
@ -1140,10 +1140,13 @@ class Deterministic_Wallet(Abstract_Wallet):
|
|||
return nmax + 1
|
||||
|
||||
def create_new_address(self, account, for_change):
|
||||
if account is None:
|
||||
account = self.default_account()
|
||||
address = account.create_new_address(for_change)
|
||||
self.history[address] = []
|
||||
self.synchronizer.add(address)
|
||||
self.save_accounts()
|
||||
return address
|
||||
|
||||
def synchronize_sequence(self, account, for_change):
|
||||
limit = self.gap_limit_for_change if for_change else self.gap_limit
|
||||
|
@ -1257,6 +1260,9 @@ class NewWallet(Deterministic_Wallet):
|
|||
def __init__(self, storage):
|
||||
Deterministic_Wallet.__init__(self, storage)
|
||||
|
||||
def default_account(self):
|
||||
return self.accounts["m/0'"]
|
||||
|
||||
def is_watching_only(self):
|
||||
return self.master_private_keys is {}
|
||||
|
||||
|
@ -1401,6 +1407,9 @@ class Wallet_2of2(NewWallet):
|
|||
NewWallet.__init__(self, storage)
|
||||
self.storage.put('wallet_type', '2of2', True)
|
||||
|
||||
def default_account(self):
|
||||
return self.accounts['m/']
|
||||
|
||||
def can_create_accounts(self):
|
||||
return False
|
||||
|
||||
|
@ -1462,6 +1471,9 @@ class Wallet_2of3(Wallet_2of2):
|
|||
|
||||
class OldWallet(Deterministic_Wallet):
|
||||
|
||||
def default_account(self):
|
||||
return self.accounts[0]
|
||||
|
||||
def make_seed(self):
|
||||
import mnemonic
|
||||
seed = random_seed(128)
|
||||
|
|
Loading…
Reference in New Issue