Files
mini_code/ton/ton 优化速度版本.py
2025-12-28 17:07:55 +08:00

101 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import random
import threading
import time
import asyncio
import aiohttp
from loguru import logger
from concurrent.futures import ThreadPoolExecutor
from tonutils.client import TonapiClient, ToncenterV3Client
from tonutils.utils import to_amount
from tonutils.wallet import (
WalletV3R1,
WalletV3R2,
WalletV4R1,
WalletV4R2,
WalletV5R1,
HighloadWalletV2,
HighloadWalletV3,
)
# 配置日志文件输出
# 按天分割日志文件,文件名包含日期,保留所有日志文件
logger.add("wallet_log_{time:YYYY-MM-DD}.log", rotation="1 day", retention="9999 days")
# API key for accessing the Tonapi (obtainable from https://tonconsole.com)
API_KEY = "AFMEX4F23ZRPOUIAAAAPHGIE5QECWZA5M75E54VD72O5IJEGP5IW3LOTXO7Z4QOX7MV6JQQ"
# Set to True for test network, False for main network
IS_TESTNET = False
headers = {
'accept': '*/*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'authorization': 'Bearer AFPJTKEBPOX3AIYAAAAKA2HWOTRNJP5MUCV5DMDCZAAOCPSAYEYS3CILNQVLF2HWKED6USY',
'cache-control': 'no-cache',
'content-type': 'application/json',
'dnt': '1',
'origin': 'https://tonviewer.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://tonviewer.com/',
'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Microsoft Edge";v="132"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'cross-site',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0',
}
async def get_ton_num_async(session, address):
for i in range(3):
try:
async with session.get(
f'https://tonapi.io/v2/accounts/{address}',
headers=headers
) as response:
data = await response.json()
return to_amount(int(data["balance"]))
except Exception as e:
await asyncio.sleep(random.random())
return False
async def main(i) -> None:
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=3, max_retries=3)
wallet, public_key, private_key, mnemonic = WalletV4R2.create(client)
async with aiohttp.ClientSession() as session:
balance = await get_ton_num_async(session, wallet.address.to_str(is_user_friendly=True, is_url_safe=True,
is_bounceable=False, is_test_only=False))
if balance:
logger.info(
f"余额:{balance} Address: {wallet.address.to_str(is_user_friendly=True, is_url_safe=True, is_bounceable=False, is_test_only=False)}D{' '.join(mnemonic)}")
else:
print(
f"{i},余额:{balance} Address: {wallet.address.to_str(is_user_friendly=True, is_url_safe=True, is_bounceable=False, is_test_only=False)}D{' '.join(mnemonic)}")
async def run_tasks():
tasks = []
n = 0
while True:
n += 1
task = asyncio.create_task(main(i=n))
tasks.append(task)
await asyncio.sleep(random.random())
# 可以根据实际情况设置任务数量上限,避免创建过多任务
if len(tasks) > 100:
done, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)
tasks = list(pending)
if __name__ == "__main__":
asyncio.run(run_tasks())