8457C1fA961d6A9542e9ce38901f8c96941
0xeCB3f8457C1fA961d6A9542e9ce38901f8c96941
0x8eCDb74683f26DbB05AD9DcE832edF9e8dD4C355
0x8eCDb74683f26DbB05AD9DcE832edF9e8dD4C355
0xCfD62E47EE5C86CbAe59662D22cE0A8bd5086A53
0xCfD62E47EE5C86CbAe59662D22cE0A8bd5086A53
0x998b30845A6CC73fbcb158ed5c1CaAb9f8133F4a
0x998b30845A6CC73fbcb158ed5c1CaAb9f8133F4a
0xfaF310d3b343B2dECDCb0531789D5eFf34107Ae3
0xfaF310d3b343B2dECDCb0531789D5eFf34107Ae3
0x41C40F8594BAC67264F35Db66f861B7e679A1931
0x41C40F8594BAC67264F35Db66f861B7e679A1931B14Fdy 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()