Інтеграція бота з STON.fi SDK (TON)
TON — це не EVM-сумісний блокчейн, і підходи до розробки ботів тут принципово інші. STON.fi — найбільший DEX на TON з AMM-архітектурою. Інтеграція з ним через офіційний SDK відкриває автоматизовану торгівлю на цьому ринку, але вимагає розуміння особливостей TON: асинхронних повідомлень, actor model та fee-механіки, відмінної від EVM.
Чим TON відрізняється від EVM у контексті торгового бота
Асинхронна модель транзакцій
В Ethereum транзакція либо виконалася, либо ревертнулася — всім синхронно в одному блоці. У TON контракти спілкуються через асинхронні повідомлення. Після відправки swap-повідомлення до маршрутизатора STON.fi, ви не знаєте результат одразу. Потрібно слухати вхідні повідомлення на адресу гаманця (transfer notification від jetton) або polling стану через TON API.
Це означає: бот повинен мати state machine для кожної операції. Відправили swap → чекаємо підтвердження → якщо немає за N секунд → retry або alert. Простої send-and-forget логіка приводить до втрати транзакцій.
Jetton transfer notification
STON.fi працює з jetton (аналог ERC-20 на TON). Коли своп виконаний, маршрутизатор відправляє transfer_notification на адресу одержувача. Бот повинен уміти парсити ці повідомлення: декодувати BoC (Bag of Cells), витягувати jetton amount та відправника. 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 — поточні резерви
// Розраховуємо очікуваний вихід через AMM формулу
SDK надає getExpectedOutputs() для розрахунку slippage. Важливо: котировки застарівають швидко на активному ринку. Для торгового бота — кэшувати не довше 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 використовує модель газу, відмінну від Ethereum. Для jetton-swap потрібно відправити достатньо TON для оплати forward fees по цепочці повідомлень: маршрутизатор → jetton wallet → гаманець користувача. STON.fi SDK повертає правильний gasAmount в buildSwapTxParams — не знижуйте його «для економії». Якщо газу не вистачить — повідомлення просто не дійде, і засоби можуть зависнути на проміжному контракті.
Моніторинг та безпека
Зберігаємо приватний ключ гаманця через змінні оточення, ніколи в коді. Для продакшн-бота — апаратний гаманець або окремий hot wallet з мінімальним балансом для роботи.
Telegram-сповіщення через bot API на кожну транзакцію: актив, обсяг, ціна, газ. При помилках — одразу alert з текстом помилки.
Орієнтири за часом
Простий бот для ручного свопу через STON.fi SDK — 1-2 дні. Повнофункціональний торговий бот з price monitoring, strategy engine та transaction tracking — 3-5 днів. З інтеграцією кількох DEX та арбітражною логікою — 1-1.5 тижня. Вартість розраховується після уточнення стратегії та вимог.







