Загрузка...

Как создать кастомный кошель Sol?

Тема в разделе Программирование создана пользователем RusHka-YbiVashka 22 июн 2025 в 01:34. 72 просмотра

  1. RusHka-YbiVashka
    RusHka-YbiVashka Автор темы 22 июн 2025 в 01:34 17 29 авг 2017
    С помощью чата ГПТ сделал такой код, кто знает как можно его улучшить или оптимизировать и ускорить процесс? Я в кодинге не очень шарю, сам не знаю, что может мне помочь. Пару советов пригодились бы.


    Python
    import base58
    import time
    import json
    import sys
    import itertools
    import threading
    import secrets
    from multiprocessing import Pool, cpu_count, Manager
    from nacl.signing import SigningKey

    def generate_and_check(args):
    prefix, attempts = args
    while True:
    seed = secrets.token_bytes(32)
    sk = SigningKey(seed)
    vk = sk.verify_key
    address = base58.b58encode(vk.encode()).decode()

    attempts.value += 1

    if address.startswith(prefix):
    return {
    "address": address,
    "private_key_seed": sk.encode(), # 32 байта
    "public_key": vk.encode() # 32 байта
    }

    def save_to_json(full_keypair_bytes, path="phantom_wallet.json"):
    keypair = list(full_keypair_bytes)
    data = {
    "name": "Vanity Wallet",
    "version": "1.0",
    "encoding": "base58",
    "keys": [{
    "address": "",
    "crypto": {
    "secretKey": base58.b58encode(bytes(keypair)).decode()
    }
    }]
    }
    with open(path, "w") as f:
    json.dump(data, f, indent=4)
    print(f"\n Ключ сохранён в {path} — можно импортировать в Phantom")

    def task_generator(prefix, attempts):
    while True:
    yield (prefix, attempts)

    def spinner(attempts, start_time):
    for c in itertools.cycle('|/-\\'):
    count = attempts.value
    speed = count / max(time.time() - start_time, 0.001)
    sys.stdout.write(f'\r Поиск... Проверено: {count:,} адресов — скорость: {speed:.1f} addr/sec {c}')
    sys.stdout.flush()
    time.sleep(0.1)

    def main(prefix):
    prefix = prefix.strip()
    assert prefix.isalnum(), "Префикс должен содержать только буквы и цифры"
    start_time = time.time()
    print(f" Ищем Solana-адрес с префиксом: {prefix}\n")

    with Manager() as manager:
    attempts = manager.Value('i', 0)

    thread = threading.Thread(target=spinner, args=(attempts, start_time), daemon=True)
    thread.start()

    with Pool(2) as pool:
    for result in pool.imap_unordered(generate_and_check, task_generator(prefix, attempts)):
    elapsed = time.time() - start_time
    print(f"\n\n Найдено за {elapsed:.2f} сек.")
    print(f" Адрес: {result['address']}")

    # Собираем 64-байтовый ключ (32 seed + 32 public) для Phantom
    full_keypair = result['private_key_seed'] + result['public_key']
    save_to_json(full_keypair)
    break

    if __name__ == "__main__":
    desired_prefix = "777Sol" # <--- Замените на нужный префикс
    main(desired_prefix)
     
    22 июн 2025 в 01:34 Изменено
  2. subvia
    если стоит WSL, то можно по официальному гайду через CLI: (только для Ubuntu/Debian, скопировал команду как есть, вирусов нет)
    Код
    curl --proto '=https' --tlsv1.2 -sSfL https://solana-install.solana.workers.dev | bash
    придется подождать, но все же. дальше как пишут команда:
    Код
    solana-keygen grind --starts-with abc:1
    чтобы адрес начинался с abc. циферка 1 обозначает количество адресов.
    Код
    solana-keygen grind --ends-with cdef:1
    чтобы адрес заканчивался cdef
    или еще вот
    Код
    solana-keygen grind --starts-and-ends-with abc:def:1
    сразу префикс и суффикс
    первый раз форматирую, сорри если что-то поедет
     
    22 июн 2025 в 01:42 Изменено
  3. august
    august 22 июн 2025 в 01:45 голые альтушки - https://lolz.live/threads/8317967/ 7980 8 дек 2021
    С++ лучше будет для скорости и многопотока, но не знаю есть ли либы для соланы
     
    1. subvia
      august, насколько я понял, официальный кейген про который я написал выше на расте написан (как и вся солана в общем то), так что вроде там тоже скорость должна быть норм
Загрузка...
Top