1c9A069d0EF00293F6f6ce18b720
0x42f7c3e0A527cCbFe3AaCEED139e838b316E92F7
0x42f7c3e0A527cCbFe3AaCEED139e838b316E92F7
0x3B38F59799B6364C2C4d44Ef0902026a3017bD05
0x3B38F59799B6364C2C4d44Ef0902026a3017bD05
0x3F47C48bc19BbB2719269bC146E9E02069b17aC8
0x3F47C48bc19BbB2719269bC146E9E02069b17aC8
0xbF8ef579C7372a0E68a7b5af30B6f24Cb18C5CdA66d236533E655BF5A104e7mn express obscure
inner rose guard
stairs panther purity ready also walnut motion drive awful apology breeze
ribbon rotate butter craft enemy apple pattern phone blur accuse pizza
piano swim end forward chunk three gentle birth ostrich donkey seed melt
Cài gói cần thiết:
pip install ecdsa
"""
import hashlib
import ecdsa
# Hàm chuyển private key thành địa chỉ BSC
def priv_to_bsc_address(priv_hex: str) -> str:
priv_hex = priv_hex.strip().lower().replace("0x","")
if len(priv_hex) != 64:
raise ValueError("Private key không hợp lệ: " + priv_hex)
priv_bytes = bytes.fromhex(priv_hex)
# Tạo public key (uncompressed)
sk = ecdsa.SigningKey.from_string(priv_bytes, curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()
pub_key = b'\x04' + vk.to_string()
# Keccak-256 (BSC/Ethereum)
keccak = hashlib.new('sha3_256')
keccak.update(pub_key[1:]) # bỏ byte đầu 0x04
address = keccak.digest()[-20:] # lấy 20 byte cuối
return "0x" + address.hex()
# ---- Chạy chính ----
input_file = "772035915-Eth-PrivateKeys.txt" # file private key
output_file = "bsc_addresses.txt"
with open(input_file, "r", encoding="utf-8", errors="ignore") as f:
lines = f.readlines()
results = []
for line in lines:
priv = line.strip()
if not priv:
continue
try:
addr = priv_to_bsc_address(priv)
results.append(f"{priv} -> {addr}")
except Exception as e:
results.append(f"{priv} -> LỖI: {e}")
try:
from bip_utils import Bip39SeedGenerator, Bip39MnemonicValidator, Bip44,
Bip44Coins, Bip44Changes
except ImportError:
print("Cài đặt bip-utils trước: pip install bip-utils")
return
if not args.input.exists():
print(f"Không tìm thấy file {args.input}")
return
# Regex nhận dạng mnemonic 12-24 từ
word = r"[a-z]+"
mnemonic_re = re.compile(rf"^({word}(?:\s+{word}){{11,23}})$")
raw_lines = args.input.read_text(encoding="utf-8",
errors="ignore").splitlines()
# Lọc ra mnemonic
candidates = []
for line in raw_lines:
line = line.strip()
if line and mnemonic_re.match(line):
candidates.append(line)
batch = 0
with ThreadPoolExecutor(max_workers=config.THREADS) as pool:
while batch < config.TOTAL_BATCHES:
if not seeds:
seeds = [sg.generate() for _ in range(config.SEED_BATCH_SIZE)]
futures = [pool.submit(worker, s, config, shared_cache, shared_stats)
for s in seeds]
results = [f.result() for f in futures]
found = [r for r in results if r]
if found:
with open(config.RESULT_FILE, "a", encoding="utf-8") as f:
f.write("\n".join(found) + "\n")
elapsed = time.time() - start_time
speed = shared_stats['seeds_scanned'] / elapsed if elapsed > 0 else 0
logging.info("="*60)
logging.info(f"Seeds scanned :
{shared_stats['seeds_scanned']}")
logging.info(f"Addresses checked :
{shared_stats['addresses_checked']}")
logging.info(f"Wallets with balance :
{shared_stats['wallets_found']}")
logging.info(f"Elapsed time : {elapsed:.2f} seconds")
logging.info(f"Speed : {speed:.2f} seeds/sec")
logging.info("="*60)
seeds = []
batch += 1
AddressCache(config.CACHE_FILE, config.MAX_CACHE_SIZE, secure).save()
if __name__ == "__main__":
asyncio.set_event_loop(loop)
main()