X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=lib%2Fwallet.py;h=2a9c23705553ec70c324e4e00acef36acc7c6eff;hb=20060a117782f1eae30ed5b9d47ee9942e0f46b3;hp=67676b5c82c14eec4c14c8edaaa4649feb132e8f;hpb=54973062bd903bda787bb94a66bc4eff7b35b77b;p=electrum-nvc.git diff --git a/lib/wallet.py b/lib/wallet.py index 67676b5..2a9c237 100644 --- a/lib/wallet.py +++ b/lib/wallet.py @@ -350,7 +350,7 @@ class Abstract_Wallet: raise Exception("Address not found", address) def getpubkeys(self, addr): - assert is_valid(addr) and self.is_mine(addr) + assert is_address(addr) and self.is_mine(addr) account, sequence = self.get_address_index(addr) a = self.accounts[account] return a.get_pubkeys( sequence ) @@ -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) @@ -779,7 +779,9 @@ class Abstract_Wallet: def make_unsigned_transaction(self, outputs, fee=None, change_addr=None, domain=None, coins=None ): for address, x in outputs: - assert is_valid(address), "Address " + address + " is invalid!" + if address.startswith('OP_RETURN:'): + continue + assert is_address(address), "Address " + address + " is invalid!" amount = sum( map(lambda x:x[1], outputs) ) inputs, total, fee = self.choose_tx_inputs( amount, fee, len(outputs), domain, coins ) if not inputs: @@ -1139,25 +1141,27 @@ class Deterministic_Wallet(Abstract_Wallet): if n > nmax: nmax = n return nmax + 1 + def create_new_address(self, account=None, for_change=0): + if account is None: + account = self.default_account() + address = account.create_new_address(for_change) + self.history[address] = [] + if self.synchronizer: + 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 - new_addresses = [] while True: addresses = account.get_addresses(for_change) if len(addresses) < limit: - address = account.create_new_address(for_change) - self.history[address] = [] - new_addresses.append( address ) + self.create_new_address(account, for_change) continue - if map( lambda a: self.address_is_old(a), addresses[-limit:] ) == limit*[False]: break else: - address = account.create_new_address(for_change) - self.history[address] = [] - new_addresses.append( address ) - - return new_addresses + self.create_new_address(account, for_change) def check_pending_accounts(self): for account_id, addr in self.next_addresses.items(): @@ -1169,22 +1173,15 @@ class Deterministic_Wallet(Abstract_Wallet): self.next_addresses.pop(account_id) def synchronize_account(self, account): - new = [] - new += self.synchronize_sequence(account, 0) - new += self.synchronize_sequence(account, 1) - return new + self.synchronize_sequence(account, 0) + self.synchronize_sequence(account, 1) def synchronize(self): self.check_pending_accounts() - new = [] for account in self.accounts.values(): if type(account) in [ImportedAccount, PendingAccount]: continue - new += self.synchronize_account(account) - if new: - self.save_accounts() - self.storage.put('addr_history', self.history, True) - return new + self.synchronize_account(account) def restore(self, callback): from i18n import _ @@ -1266,6 +1263,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 {} @@ -1410,6 +1410,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 @@ -1471,6 +1474,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)