
[ЛАЙКИ=5]
Думаю, многим из вас знакома эта ситуация из реальной жизни. Вам нужно сгенерировать множество кошельков для какого-то проекта, для распространения, для тестирования или просто так. Создание их вручную каждый раз через какой-либо веб-сайт — это трудоемкий и утомительный процесс. А ввод закрытых ключей через веб-формы даже не рассматривается — никогда не знаешь, кто их запомнит.
Я сам через это прошёл, когда мне нужно было создать около пятидесяти кошельков для одного эксперимента. Я думал, что найду сервис, который сгенерирует их оптом, но он либо был платным, либо вызывал подозрения, либо вообще не работал. Мне пришлось самому разобраться и написать собственного бота. Теперь я объясню, как это сделать, чтобы вам не пришлось об этом беспокоиться.
Что такое криптокошелек и как его создать?
Прежде чем углубиться в код, нам нужно понять, что мы генерируем. Криптокошелек — это не какой-то файл на вашем диске. Это просто пара ключей: закрытый ключ и открытый ключ.
Ваш закрытый ключ — это ваш секрет. Тот, кто его знает, может контролировать ваши монеты. Вам необходимо хранить его в тайне.
Ваш открытый ключ и адрес кошелька — это то, что вы можете показать другим, чтобы они могли отправлять вам деньги. Адрес формируется из открытого ключа с помощью различных криптографических преобразований.
По сути, создание кошелька — это просто генерация случайного числа (приватного ключа) и вычисление всего остального на его основе. Биткойн использует алгоритм ECDSA, а Ethereum — аналогичный, но немного отличающийся алгоритм.
Что нам понадобится для создания бота
Мы будем писать код на Python, потому что это простой язык, и для него существует множество готовых библиотек. Если вы не знаете Python, но хотите следовать инструкциям, просто ищите информацию в Google по ходу дела; это не так уж и сложно.
Библиотеки для установки:
bitcoinlib — для работы с биткоином и его производными.
web3.py — для сетей, совместимых с Ethereum и EVM.
· мнемоническое правило — для генерации мнемонических фраз (те же 12-24 слова, которые используются для восстановления кошельков).
Всё устанавливается одной командой:
```
pip install bitcoinlib web3 mnemonic
```
Если возникают ошибки, возможно, потребуется установить что-то ещё, но обычно проблем не возникает.
Как создать биткойн-кошельки
Начнём с Биткоина, потому что это классика. Вот пример функции, которая создаёт один кошелёк:
```python
from bitcoinlib.keys import Key
from bitcoinlib.mnemonic import Mnemonic
def create_bitcoin_wallet():
# Сгенерировать мнемоническое слово из 12 слов
mnemo = Mnemonic()
seed_phrase = mnemo.generate()
# Создать ключ из этого начального значения
key = Key.from_mnemonic(seed_phrase)
# Получение закрытого ключа в формате WIF
private_key_wif = key.as_WIF()
# Получить адрес кошелька
адрес = ключ.адрес()
print(f"Мнемоническое начальное значение: {начальная_фраза}")
print(f"Закрытый ключ (WIF): {private_key_wif}")
print(f"Адрес биткоина: {адрес}")
возвращаться {
"seed_phrase": seed_phrase,
"private_key_wif": private_key_wif,
"адрес": адрес
}
```
Что здесь происходит:
· Функция Mnemonic().generate() создает случайную фразу из 12 слов. Ее можно использовать для восстановления кошелька в любом обычном приложении.
· Key.from_mnemonic(seed_phrase) преобразует эту фразу в ключи.
· Функция key.as_WIF() создает закрытый ключ в формате WIF (Wallet Import Format). Этот ключ можно импортировать в большинство кошельков.
· key.address() — это адрес, который вы сообщаете людям, чтобы они могли отправлять вам биткоины.
Как сгенерировать кошельки Ethereum
С Ethereum ситуация несколько иная, но всё ещё несложная.
```python
from eth_account import Account
from eth_account.signers.local import LocalAccount
def create_ethereum_wallet():
# Включить поддержку HD-кошельков
Account.enable_unaudited_hdwallet_features()
# Сгенерируйте фразу и создайте учетную запись
account, mnemonic_phrase = Account.from_mnemonic(
мнемоника = Account.generate_mnemonic(),
account_path="m/44'/60'/0'/0/0"
)
# Получение закрытого ключа в шестнадцатеричном формате
private_key = account.key.hex()
# Получение адреса Ethereum
адрес = account.address
print(f"Субъективная фраза: {мнемоника}")
print(f"Приватный ключ (HEX): {private_key}")
print(f"Адрес Ethereum: {address}")
возвращаться {
"seed_phrase": mnemonic_phrase,
"private_key": private_key,
"адрес": адрес
}
```
Здесь нюансы:
Account.enable_unaudited_hdwallet_features() — включает экспериментальные функции. Лучше подробнее изучить это в рабочей среде, но для домашнего использования вполне подойдет.
account_path — это путь BIP-44 для Ethereum. Он необходим для генерации нескольких адресов из одной мнемонической фразы.
Здесь закрытый ключ представлен в шестнадцатеричном формате, а не в формате WIF, как в Биткоине.
Объединяя все это в одном боте.
Теперь, когда у нас есть функции для создания отдельных кошельков, мы можем создать полноценного бота, который будет создавать их партиями и сохранять в файл.
```python
импорт json
from bitcoinlib.keys import Key
from bitcoinlib.mnemonic import Mnemonic
from eth_account import Account
def create_bitcoin_wallet():
mnemo = Mnemonic()
seed_phrase = mnemo.generate()
key = Key.from_mnemonic(seed_phrase)
private_key_wif = key.as_WIF()
адрес = ключ.адрес()
return {"type": "bitcoin", "seed_phrase": seed_phrase, "private_key": private_key_wif, "address": address}
def create_ethereum_wallet():
Account.enable_unaudited_hdwallet_features()
account, mnemonic_phrase = Account.from_mnemonic(
мнемоника = Account.generate_mnemonic(),
account_path="m/44'/60'/0'/0/0"
)
private_key = account.key.hex()
адрес = account.address
return {"type": "ethereum", "seed_phrase": mnemonic_phrase, "private_key": private_key, "address": address}
def generate_wallets(num_bitcoin=1, num_ethereum=1, output_file="wallets.json"):
все_кошельки = []
print(f"Генерация {num_bitcoin} биткоин-кошельков...")
for i in range(num_bitcoin):
wallet = create_bitcoin_wallet()
all_wallets.append(wallet)
print(f" {i+1}. BTC: {wallet['address']}")
print(f"\nГенерация кошельков Ethereum {num_ethereum}...")
for i in range(num_ethereum):
wallet = create_ethereum_wallet()
all_wallets.append(wallet)
print(f" {i+1}. ETH: {wallet['address']}")
# Сохранение в JSON
with open(output_file, 'w') as f:
json.dump(all_wallets, f, indent=4)
print(f"\nГотово! Кошельки сохранены в файл {output_file}")
если __name__ == "__main__":
print("=== Генератор криптовалютных кошельков ===\n")
пытаться:
btc_count = int(input("Сколько биткоин-кошельков вам нужно?"))
eth_count = int(input("Сколько кошельков Ethereum вам нужно?"))
filename = input("Имя файла для сохранения (по умолчанию: wallets.json): ") или "wallets.json"
generate_wallets(num_bitcoin=btc_count, num_ethereum=eth_count, output_file=filename)
except ValueError:
print("Ошибка: необходимо ввести цифры, а не буквы")
за исключением исключения как e:
print(f"Что-то пошло не так: {e}")
```
Он прост в использовании.
Сохраните код в файл, например, wallet_bot.py. Запустите его в терминале:
```
python wallet_bot.py
```
Затем программа запросит, сколько биткоин-кошельков нужно сгенерировать, сколько эфириум-кошельков и в какой файл сохранить результат.
После выполнения команды появится JSON-файл со следующим содержимым:
```json
[
{
"type": "bitcoin",
"seed_phrase": "abandon abandon apple banana ...",
"private_key": "L1HKjfajsdf...",
"address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
},
{
"type": "ethereum",
"seed_phrase": "еще двенадцать слов здесь...",
"private_key": "0x1234abcd...",
"адрес": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
}
]
```
Что еще можно добавить?
Этот бот — базовая модель. Его можно расширять в соответствии с вашими потребностями.
Генерация на основе пароля. Вы можете настроить детерминированное (на основе пароля) создание кошельков, а не случайное. Это удобно, если вам нужно восстановить все кошельки с помощью одного мастер-ключа.
Поддерживаются и другие криптовалюты: TRON, Solana и различные токены стандарта ERC-20. Каждая сеть имеет свои собственные библиотеки.
Шифрование файла с результатами. Вместо простого JSON можно сохранить все данные в зашифрованном виде, чтобы закрытые ключи не были доступны в открытом виде.
Интеграция с базой данных. Если у вас много кошельков, удобнее хранить их в SQLite или PostgreSQL, а не в файле.
Мои подводные камни
Я совершил большую ошибку, поэтому рассказываю вам об этом, чтобы вы не повторяли её.
Ошибка 1: Когда я впервые запустил скрипт, я забыл, что закрытые ключи выводятся в консоль. Я показывал его другу, и он, внимательный наблюдатель, спросил: «Почему ты выставляешь закрытые ключи по всему экрану?» Мне пришлось переделать.
Проблема 2. Я думал, что мнемоническая фраза не так важна, важнее закрытый ключ. Потом я узнал, что с помощью этой фразы можно восстановить все ключи в той же цепочке. Теперь я храню и саму фразу.
Проблема 3. Я сохранил результаты в неструктурированный текстовый файл. Анализ этих логов оказался сложной задачей. Я переключился на формат JSON.
Проблема 4. Я забыл, что закрытый ключ Ethereum находится в шестнадцатеричном формате, и попытался импортировать его в биткоин-кошелек. Естественно, ничего не получилось.
Проблема 5. Я сгенерировал кошельки на виртуальной машине, а затем удалил виртуальную машину. Вместе со всеми ключами. Хорошо, что это были тестовые ключи.
Важные замечания по безопасности
Несколько вещей, которые следует всегда помнить.
Никогда не храните закрытые ключи в открытом виде. На диске, в облаке или в заметках телефона. Если кто-то получит доступ к файлу кошелька, вы потеряете все.
Никогда не вводите закрытые ключи на веб-сайтах, даже если сайт выглядит как официальный кошелек. Скопируйте их и немедленно удалите из буфера обмена.
Никогда не создавайте ключи на компьютерах, которые могут быть заражены. Если в них есть троянская программа, она может украсть все, что вы создадите.
Всегда создавайте резервные копии. Флешка, лист бумаги и зашифрованный файл в облаке.
Кратко по теме
Написать собственного бота для генерации криптовалютных кошельков не так сложно, как кажется. Готовые библиотеки выполняют всю сложную работу; вам нужно лишь скомпоновать их.
Для Bitcoin используйте bitcoinlib, а для Ethereum — eth_account. Добавьте генерацию мнемонических фраз, упакуйте их в циклы и сохраните в формате JSON.
Главное – помните о безопасности. Ваши ключи – это ваши деньги. Обращайтесь к ним соответствующим образом.
[/ЛАЙКИ]