Skip to main content

A tool to efficiently check if a Bitcoin Address has ever been used before

Project description

used_addr_check (Python)

A tool to efficiently check if a Bitcoin Address has ever been used before

Description

Based on loyce.club's "all bitcoin addresses ever used" list, this library and CLI tool can search the list very, very fast and efficiently.

Features

  • Lookup either a single address, or a long list of potential addresses.
  • CLI and library options
  • Generates a binary search tree index from the text file, and then uses that to search for the address.

Getting Started

This project depends on the large address list being downloaded and extracted.

  1. Download the zipped text file of used addresses, where each line is a used Bitcoin address.
wget http://alladdresses.loyce.club/all_Bitcoin_addresses_ever_used_sorted.txt.gz
  1. Extract the file:
gunzip -d ./all_Bitcoin_addresses_ever_used_sorted.txt.gz --stdout | pv > all_Bitcoin_addresses_ever_used_sorted.txt

Usage - CLI

pip install used_addr_check

# download and extract the required file:
wget http://alladdresses.loyce.club/all_Bitcoin_addresses_ever_used_sorted.txt.gz
gunzip -d ./all_Bitcoin_addresses_ever_used_sorted.txt.gz --stdout | pv > addr_list.txt

# generate the index file (optional):
used_addr_check index -f ./addr_list.txt
# the index file is now at: ./addr_list.index.parquet

# search a couple of addresses:
used_addr_check search -f ./addr_list.txt -s moW9o415jNfgyuzytEMZD84Kovri5DJ64e -s mncqTEYTidNdbqGZnXTd1JFYRrruuh5StV

# search for a long list of addresses (extracted by regex):
used_addr_check scan_file -f ./addr_list.txt -n file_with_addresses_to_lookup.txt

Usage - Library

This example will generate the index file, if required.

from used_addr_check import search_multiple_in_file

needles = [
    'moW9o415jNfgyuzytEMZD84Kovri5DJ64e',
    'mncqTEYTidNdbqGZnXTd1JFYRrruuh5StV'
]
haystack_file_path = './addr_list.txt'

addresses_found_list: List[str] = search_multiple_in_file(
    haystack_file_path=haystack_file_path,
    needles=needled,
)
print(f"{addresses_found_list=}")

Performance Notes

  • With the default indexing size of one index entry per 1000 addresses in the "haystack" file, the index is a 140MB Parquet file.
  • On a 2023 mid-range laptop with an SSD:
    • Indexing takes 4 minutes.
    • Addresses can be searched at 20 query addresses ("needles") per sec.

There are certainly opportunities for further improvement, but this performance is adequate.

Contributing

Please Star this repo if it's helpful.

Please open GitHub Issues and Pull Requests with features/bugs/fixes.

Future Features

  • Optionally disable loguru logging in subfunctions
  • Convert "found address" result to an iterator.
  • Test cases.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

used_addr_check-0.1.1.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

used_addr_check-0.1.1-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file used_addr_check-0.1.1.tar.gz.

File metadata

  • Download URL: used_addr_check-0.1.1.tar.gz
  • Upload date:
  • Size: 9.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.12

File hashes

Hashes for used_addr_check-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c07740d681eec07793bc41c38d56c353be8796fce1b80bc8d468c24cf7d90489
MD5 648c5f824da6ee8f630123531e61965e
BLAKE2b-256 fa637efde79fac83d8f4fa957e09bb36c44161dc76b4c9813e400226a51eaab8

See more details on using hashes here.

File details

Details for the file used_addr_check-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for used_addr_check-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bac991ed79c28e25268a26b06d4fc10ef6c3bccd7fbc5326a7727e8818ca6d8f
MD5 4959a07fe72007e23e389a3b04f5fea7
BLAKE2b-256 f58c520f6566152259607ce14e5a1f261321897657771d42403a2d587003e435

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page