Автоматизация подтверждения транзакций TON в Tonkeeper
Многие пользователи сталкиваются с необходимостью вручную подтверждать каждую транзакцию в кошельке Tonkeeper после покупки звезд на фрагменте. Это неудобно и отнимает время. В этой статье мы подробно разберём, как написать скрипт для автоматической подписи транзакций на стеке Node.js или Python, избежав типичных ошибок.
Почему ручное подтверждение - проблема?
Tonkeeper требует подтверждения каждой исходящей транзакции для обеспечения безопасности. Однако если вы совершаете много покупок звезд на фрагменте, постоянное нажатие кнопки «Подтвердить» становится утомительным. Автоматизация позволяет ускорить процесс и исключить человеческий фактор.
Основные способы автоматизации подписи
Для программной подписи транзакций в сети TON используются два подхода:
- Через Ton Connect - протокол для взаимодействия с кошельками. Подходит для подписи с помощью Tonkeeper, но требует активного сеанса.
- Через SDK TON - напрямую работаете с ключами кошелька. Не требует Tonkeeper, но вы должны иметь доступ к секретным ключам.
Библиотеки для Node.js и Python
Node.js
Для работы с TON на Node.js используйте официальный пакет @ton/ton. Он предоставляет функции для создания и подписи транзакций. Пример базового скрипта:
const { TonClient, WalletContractV4, internal } = require('@ton/ton');
const { mnemonicToPrivateKey } = require('@ton/crypto');
async function sendTransaction() {
const mnemonics = ['ваша', 'мнемоническая', 'фраза'];
const key = await mnemonicToPrivateKey(mnemonics);
const wallet = WalletContractV4.create({ publicKey: key.publicKey, workchain: 0 });
const client = new TonClient({ endpoint: 'https://toncenter.com/api/v2/jsonRPC' });
const seqno = await wallet.getSeqno(client);
const transfer = wallet.createTransfer({
seqno,
secretKey: key.secretKey,
messages: [internal({ to: 'адрес_получателя', value: '0.01', body: 'комментарий' })]
});
await client.sendExternalMessage(wallet, transfer);
}
Этот код создаёт и отправляет подписанную транзакцию без участия Tonkeeper.
Python
Для Python используйте библиотеку tonsdk или pytonlib. Пример с tonsdk:
from tonsdk.contract.wallet import Wallets, WalletVersionEnum
from tonsdk.crypto import mnemonic_new, mnemonic_to_private_key
mnemonics = ['ваша', 'мнемоническая', 'фраза']
private_key = mnemonic_to_private_key(mnemonics)
wallet = Wallets(WalletVersionEnum.v4r2, private_key)
# Создание и подпись транзакции
query = wallet.create_transfer(dest='адрес_получателя', amount=0.01, message='тест')
await query.send()
Частые ошибки и их решение
При написании скриптов новички часто сталкиваются с проблемами:
- Неверный эндпоинт - используйте проверенный RPC-узел (например, toncenter.com).
- Ошибка seqno - всегда получайте актуальный seqno перед созданием транзакции.
- Проблемы с мнемоникой - фраза должна быть в правильном порядке и без лишних пробелов.
Альтернативы: Ton Connect и фоновые сессии
Если вы не хотите хранить ключи в скрипте, используйте Ton Connect. Он позволяет один раз авторизовать приложение в Tonkeeper и затем подписывать транзакции через API без ручного подтверждения. Для этого подойдёт библиотека @tonconnect/sdk (Node.js) или tonconnect (Python).
Заключение
Автоматизация подписи транзакций TON - реальная задача, решаемая с помощью современных SDK. Выбирайте подход в зависимости от ваших требований к безопасности: работа с ключами напрямую или через Ton Connect. Примеры кода выше помогут вам начать и избежать типичных ошибок.