def search_address_path(address_in, account=0): if isinstance(address_in, str): address_in = bytes([ord(c) for c in address_in]) index = 0 change = 0 state = 0 while True: keypath = energi.serialize_pathd( energi.create_pathd(index=index, change=change, account=account)) public_key = ledger.get_public_key(keypath) address = energi.encode_address(energi.compress_public_key(public_key)) uncompressed_address = energi.encode_address(public_key) if address_in == address or address_in == uncompressed_address: return energi.create_pathd(index=index, change=change, account=account) unused = is_unused(address) and is_unused(uncompressed_address) if state == 0: if unused: return None state = 1 change = 1 elif state == 1: if unused: index += 1 change = 0 state = 0 else: change += 1
def get_all_used_addresses(threshold=1, account=0, verbose=False, index=0): addresses = [] missing = 0 while missing <= threshold: keypath = energi.serialize_pathd( energi.create_pathd(account=account, index=index)) public_key = ledger.get_public_key(keypath) address = energi.encode_address(energi.compress_public_key(public_key)) uncompressed_address = energi.encode_address(public_key) find_change = False if not is_unused(address) or not is_unused(uncompressed_address): ae = address_entry(address, uncompressed_address, public_key, index=index, account=account) if verbose: print('found used: %s' % ae['path']) addresses.append(ae) missing = 0 find_change = True if find_change: addresses += get_all_used_change(index, threshold, account, verbose) missing += 1 index += 1 return addresses
def get_all_used_change(for_index, threshold=1, account=0, verbose=False): addresses = [] missing = 0 change = 1 while missing <= threshold: keypath = energi.serialize_pathd( energi.create_pathd(index=for_index, change=change, account=account)) public_key = ledger.get_public_key(keypath) address = energi.encode_address(energi.compress_public_key(public_key)) uncompressed_address = energi.encode_address(public_key) if not is_unused(address) or not is_unused(uncompressed_address): ae = address_entry(address, uncompressed_address, public_key, change=change, index=for_index, account=account) if verbose: print('found used: %s' % ae['path']) addresses.append(ae) missing = 0 missing += 1 change += 1 return addresses
def get_address_at(index): ae = energi.create_pathd(index = index) sys.stdout.write('Displaying address on ledger... '); sys.stdout.flush() ae = address.get_address(ae, display = True) print('\nAddress: %(address)s (path: %(path)s)' % ae) walletdb.put_address_db(ae['address'], pubkey = ae['public_key'], pkh = energi.hash160(energi.compress_public_key(ae['public_key'])), account = ae['account'], index = ae['index'], change = ae['change']) return ae
def get_next_change(for_index, account=0): i = 1 while True: keypath = energi.serialize_pathd( energi.create_pathd(index=for_index, change=i, account=account)) public_key = ledger.get_public_key(keypath) address = energi.encode_address(energi.compress_public_key(public_key)) uncompressed_address = energi.encode_address(public_key) if is_unused(address) and is_unused(uncompressed_address): return address_entry(address, uncompressed_address, public_key, index=for_index, change=i, account=account) i += 1
def get_next_unused(index=0, n=1, account=0): count = 0 i = index rl = [] while count < n: keypath = energi.serialize_pathd( energi.create_pathd(index=i, account=0)) public_key = ledger.get_public_key(keypath) address = energi.encode_address(energi.compress_public_key(public_key)) uncompressed_address = energi.encode_address(public_key) if is_unused(address) and is_unused(uncompressed_address): rl.append( address_entry(address, uncompressed_address, public_key, index=i, account=account)) count += 1 i += 1 return rl