示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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