from bip_utils import (
Bip39SeedGenerator,
Bip32Slip10Ed25519,
SolAddr
)
import base58
INPUT_FILE = "seeds.txt"
OUTPUT_FILE = "keys_addresses_base58.txt"
DERIVATION_PATH = "m/44'/148'/0'"
def derive_solana_secret_base58(mnemonic: str):
seed_bytes = Bip39SeedGenerator(mnemonic).Generate()
ctx = Bip32Slip10Ed25519.FromSeed(seed_bytes).DerivePath(DERIVATION_PATH)
priv_key = ctx.PrivateKey().Raw().ToBytes() # 32 bytes
pub_key = ctx.PublicKey().RawCompressed().ToBytes()[1:] # 32 bytes
#

Solana secret key = private + public
secret_key_64 = priv_key + pub_key
secret_base58 = base58.b58encode(secret_key_64).decode()
pub_base58 = base58.b58encode(pub_key).decode()
address = SolAddr.EncodeKey(pub_key)
return secret_base58, pub_base58, address
with open(INPUT_FILE, "r", encoding="utf-8") as f, \
open(OUTPUT_FILE, "a", encoding="utf-8") as out:
for i, line in enumerate(f, 1):
mnemonic = line.strip()
if not mnemonic:
continue
try:
secret_b58, pub_b58, addr = derive_solana_secret_base58(mnemonic)
out.write(
f"#{i}\n"
f"SEED: {mnemonic}\n"
f"SOLANA_SECRET_KEY_BASE58: {secret_b58}\n"
f"PUBLIC_KEY_BASE58: {pub_b58}\n"
f"ADDRESS: {addr}\n"
f"{'-'*70}\n"
)
out.flush()
print(f"[{i}] OK {addr}")
except Exception as e:
out.write(f"#{i} ERROR: {e}\n{'-'*70}\n")
out.flush()
print(f"[{i}] ERROR {e}")
ВОТ ПРОСТОЙ ПИТОНОВСКИЙ СКРИПТ, ДЕРИВАЦИЮ НУЖНУЮ САМ ПОДСТАВИШЬ ( В САМОМ ВЕРХУ КОДА)
ЕСЛИ ФОРМАТ СОХРАНКИ НЕ ПОДХОДИТ, ТО ЭТО МОЖНО ЗА 2 МИНУТЫ ИЗМЕНИТЬ В ЧАТЕГПТ.
INPUT_FILE = "seeds.txt" - ТЕКСТОВИК С СИДКАМИ РЯДОМ СО СКРИПТОМ