Интеграция бота с StonFi SDK (TON)
TON — это не EVM-совместимый блокчейн, и подходы к разработке ботов здесь принципиально другие. STON.fi — крупнейший DEX на TON с AMM-архитектурой. Интеграция с ним через официальный SDK открывает автоматизированную торговлю на этом рынке, но требует понимания специфики TON: асинхронных сообщений, actor model и fee-механики, отличающейся от EVM.
Чем TON отличается от EVM в контексте торгового бота
Асинхронная модель транзакций
В Ethereum транзакция либо выполнилась, либо ревертнулась — всё синхронно в одном блоке. В TON контракты общаются через асинхронные сообщения. Отправив swap-сообщение на STON.fi router, вы не знаете результат немедленно. Нужно слушать входящие сообщения на адрес кошелька (transfer notification от jetton) или polling состояния через TON API.
Это означает: бот должен иметь state machine для каждой операции. Отправили swap → ждём подтверждения → если нет за N секунд → retry или алерт. Простая send-and-forget логика приводит к потере транзакций.
Jetton transfer notification
STON.fi работает с jetton (аналог ERC-20 на TON). Когда swap выполнен, router отправляет transfer_notification на адрес получателя. Бот должен уметь парсить эти сообщения: декодировать BoC (Bag of Cells), извлекать jetton amount и sender. STON.fi SDK предоставляет типы для этого, но интеграция требует настройки TON listener.
Интеграция с STON.fi SDK
Установка и конфигурация
import { DEX, pTON } from "@ston-fi/sdk";
import TonWeb from "tonweb";
const tonweb = new TonWeb(
new TonWeb.HttpProvider("https://toncenter.com/api/v2/jsonRPC", {
apiKey: process.env.TONCENTER_API_KEY
})
);
const router = tonweb.open(
new DEX.v1.Router("EQB3ncyBUTjZUA5EnFKR5_EnOMI9V1tTEAAPaiU71gc4TiUt")
);
STON.fi SDK v2 поддерживает DEX v1 и v2 пулы. Для нового кода используем v2 router — он поддерживает более сложные routing сценарии и лучшую интеграцию с API.
Получение котировок
const pool = await router.getPool({
token0: "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c", // TON
token1: USDT_JETTON_ADDRESS
});
const data = await pool.getData();
// data.reserve0, data.reserve1 — текущие резервы
// Рассчитываем ожидаемый output через AMM формулу
SDK предоставляет getExpectedOutputs() для расчёта слиппеджа. Важно: котировки устаревают быстро на активном рынке. Для торгового бота — кэшировать не дольше 5-10 секунд.
Выполнение свопа
const swapTxParams = await router.buildSwapTonToJettonTxParams({
userWalletAddress: wallet.address,
proxyTon: new pTON.v1(),
offerAmount: new TonWeb.utils.BN("1000000000"), // 1 TON в nanotons
askJettonAddress: USDT_JETTON_ADDRESS,
minAskAmount: expectedOutput.mul(99).div(100), // 1% slippage tolerance
queryId: Date.now() // уникальный id для tracking
});
await wallet.sendTransfer({
secretKey: keyPair.secretKey,
toAddress: swapTxParams.to,
amount: swapTxParams.gasAmount,
seqno: await wallet.getSeqno(),
payload: swapTxParams.payload
});
queryId — критически важный параметр для tracking. Он включается в сообщения ответа и позволяет сопоставить swap-запрос с результатом в асинхронной модели.
Построение торгового бота
Архитектура
Price monitor: периодический polling цен через STON.fi API (https://api.ston.fi/v1/pools) или прямые on-chain запросы. API удобнее — возвращает нормализованные данные по всем пулам. On-chain надёжнее при ненадёжном API.
Strategy engine: логика торговых решений. Для арбитражного бота — сравнение цен STON.fi с другими TON DEX (DeDust). Для трендового бота — технические индикаторы на исторических ценах из API.
Transaction manager: очередь транзакций с retry логикой. TON требует правильного seqno для кошелька — параллельная отправка приводит к ошибкам. Транзакции отправляем последовательно или через отдельные sub-wallets.
Result tracker: polling последних транзакций кошелька через TON API для подтверждения выполнения свопов. https://toncenter.com/api/v2/getTransactions?address=...
Управление газом на TON
TON использует модель gas, отличную от Ethereum. Для jetton-swap нужно отправить достаточно TON для оплаты forward fees по цепочке сообщений: router → jetton wallet → user wallet. STON.fi SDK возвращает правильный gasAmount в buildSwapTxParams — не занижайте его «из экономии». Если газа не хватит — сообщение просто не дойдёт, и funds могут зависнуть на промежуточном контракте.
Мониторинг и безопасность
Приватный ключ кошелька храним через переменные окружения, никогда в коде. Для продакшн-бота — аппаратный кошелёк или отдельный hot wallet с минимальным балансом для работы.
Telegram-уведомления через bot API на каждую транзакцию: актив, объём, цена, газ. При ошибках — немедленный алерт с текстом ошибки.
Ориентиры по срокам
Простой бот для ручного свопа через STON.fi SDK — 1-2 дня. Полноценный торговый бот с price monitoring, strategy engine и transaction tracking — 3-5 дней. С интеграцией нескольких DEX и арбитражной логикой — 1-1.5 недели. Стоимость рассчитывается после уточнения стратегии и требований.







