Автоматизация подтверждения транзакций 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. Примеры кода выше помогут вам начать и избежать типичных ошибок.

    Часто задаваемые вопросы