From 649f2656a32067e84b7e2ef2807ccd32d1a93f1f Mon Sep 17 00:00:00 2001 From: ddrwode <2797r9234@ferfrfgr> Date: Thu, 27 Nov 2025 15:15:44 +0800 Subject: [PATCH] rgfergrg --- gpt 优化后的速度版本.py | 86 +++++++++++++++++++++++++++++++++++++++++ test111.py | 57 +++++++++++++++++---------- ton 优化速度版本.py | 2 +- ton 撞助记词.py | 2 +- ton 生成助记词.py | 2 +- 5 files changed, 126 insertions(+), 23 deletions(-) create mode 100644 gpt 优化后的速度版本.py diff --git a/gpt 优化后的速度版本.py b/gpt 优化后的速度版本.py new file mode 100644 index 000000000..c35a2cfba --- /dev/null +++ b/gpt 优化后的速度版本.py @@ -0,0 +1,86 @@ +import random +import asyncio +import aiohttp +from loguru import logger + +from tonutils.client import ToncenterV3Client +from tonutils.utils import to_amount +from tonutils.wallet import WalletV4R2 + +# 日志尽量减少 IO +logger.add("wallet_log_{time:YYYY-MM-DD}.log", rotation="1 day", retention="30 days") + +API_KEY = "AFMEX4F23ZRPOUIAAAAPHGIE5QECWZA5M75E54VD72O5IJEGP5IW3LOTXO7Z4QOX7MV6JQQ" +IS_TESTNET = False + +headers = { + "accept": "*/*", + "authorization": "Bearer AFPJTKEBPOX3AIYAAAAKA2HWOTRNJP5MUCV5DMDCZAAOCPSAYEYS3CILNQVLF2HWKED6US", + "content-type": "application/json", + "user-agent": "Mozilla/5.0", +} + +# 全局复用 Toncenter client +client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=10, max_retries=1) + + +async def get_balance(session, address: str): + url = f"https://tonapi.io/v2/accounts/{address}" + + for _ in range(2): # 降低重试次数提升速度 + try: + async with session.get(url, headers=headers, timeout=3) as r: + data = await r.json() + return to_amount(int(data.get("balance", 0))) + except Exception: + await asyncio.sleep(0.05) # 小延迟即可 + return None + + +async def handle_wallet(session, idx: int): + wallet, public_key, private_key, mnemonic = WalletV4R2.create(client) + address = wallet.address.to_str( + is_user_friendly=True, + is_url_safe=True, + is_bounceable=False, + is_test_only=False + ) + + balance = await get_balance(session, address) + + if balance: + logger.info(f"[{idx}] Balance={balance} | {address} | Mnemonic={' '.join(mnemonic)}") + else: + print(f"[{idx}] 余额查询失败 | {address},余额:{balance}") + + +async def worker(worker_id, session, queue): + while True: + idx = await queue.get() + await handle_wallet(session, idx) + queue.task_done() + + +async def main(): + queue = asyncio.Queue() + + # 单一 Session 复用,性能最优 + async with aiohttp.ClientSession() as session: + + # 启动固定数量 Worker,提高并行效率 + workers = [asyncio.create_task(worker(i, session, queue)) for i in range(20)] + + counter = 0 + while True: + counter += 1 + await queue.put(counter) + + # 控制生成速度 + await asyncio.sleep(0.01) + + for w in workers: + w.cancel() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/test111.py b/test111.py index e1c80c93c..9cc1cdac3 100644 --- a/test111.py +++ b/test111.py @@ -1,26 +1,43 @@ -import threading +import random import time -def daemon_thread_function(): - print("守护线程开始") - time.sleep(5) - print("守护线程结束") +import requests +from tonutils.utils import to_amount -def non_daemon_thread_function(): - print("非守护线程开始") - time.sleep(2) - print("非守护线程结束") -# 创建守护线程 -daemon_thread = threading.Thread(target=daemon_thread_function, daemon=True) -# 创建非守护线程 -non_daemon_thread = threading.Thread(target=non_daemon_thread_function) +def get_ton_num(address): + 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', + } -# 启动线程 -daemon_thread.start() -non_daemon_thread.start() + for i in range(3): + try: + response = requests.get( + f'https://tonapi.io/v2/accounts/{address}', + headers=headers, + ) -print("主线程继续执行") -# 主线程等待非守护线程结束 -non_daemon_thread.join() -print("主线程结束") \ No newline at end of file + return to_amount(int(response.json()["balance"])) + except: + time.sleep(random.random()) + + return False + +if __name__ == '__main__': + print(get_ton_num(address="EQD-8WpOhknZ6Wip9EN-jz5Tw-SJvYgu_x2FSDFlXH1kSo2O")) \ No newline at end of file diff --git a/ton 优化速度版本.py b/ton 优化速度版本.py index 4da8b45bd..05cbb7861 100644 --- a/ton 优化速度版本.py +++ b/ton 优化速度版本.py @@ -64,7 +64,7 @@ async def get_ton_num_async(session, address): async def main(i) -> None: - client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=1, max_retries=1) + 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: diff --git a/ton 撞助记词.py b/ton 撞助记词.py index ffbca83ef..7535aed53 100644 --- a/ton 撞助记词.py +++ b/ton 撞助记词.py @@ -87,7 +87,7 @@ def get_ton_num(address): async def main(i) -> None: - client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=1, max_retries=1) + client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=2, max_retries=1) wallet, public_key, private_key, mnemonic = WalletV4R2.create(client) for i1 in range(5): diff --git a/ton 生成助记词.py b/ton 生成助记词.py index 0b5b4ec87..2384ce24e 100644 --- a/ton 生成助记词.py +++ b/ton 生成助记词.py @@ -19,7 +19,7 @@ IS_TESTNET = True def main() -> None: - client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=1, max_retries=1) + client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=3, max_retries=3) wallet, public_key, private_key, mnemonic = WalletV4R2.create(client) # Uncomment and use the following lines to create different wallet versions: