אנו משלבים בוטים למסחר עם STON.fi SDK למסחר אוטומטי ב-DEX בבלוקצ'יין TON. TON שונה מהותית מ-EVM: יש בו מודל הודעות אסינכרוני, מודל שחקנים (actor model) ומכניקת עמלות ייחודית. הניסיון שלנו בפיתוח בלוקצ'יין (5+ שנים, מעל 10 פרויקטים על TON) מאפשר לנו לקחת בחשבון את כל הניואנסים ולבנות בוט אמין במפתח מלא.
למה TON קשה יותר מ-EVM עבור בוט
מודל עסקאות אסינכרוני
באת'ריום, עסקה או מתבצעת או מתבטלת — הכל סינכרוני בתוך בלוק אחד. ב-TON, חוזים מתקשרים באמצעות הודעות אסינכרוניות. לאחר שליחת הודעת החלפה לנתב של STON.fi, אינך יודע את התוצאה מיד. עליך להאזין להודעות נכנסות בכתובת הארנק (התראה על העברת jetton) או לבדוק את המצב דרך TON API.
משמעות הדבר היא שהבוט חייב להחזיק מכונת מצבים (state machine) עבור כל פעולה. שלח החלפה → המתן לאישור → אם אין אישור תוך N שניות → נסה שוב או התריע. לוגיקה פשוטה של "שלח ושכח" מובילה לעסקאות אבודות.
כל הודעה ב-TON מקודדת כ-Bag of Cells (BoC). ניתוח התראות נכנסות דורש פענוח של ה-BoC וחילוץ שדות כמו כמות ה-jetton והשולח. ה-STON.fi SDK מספק טיפוסים לכך, אך האינטגרציה דורשת הגדרת מאזין TON.
התיעוד הרשמי של STON.fi SDK ממליץ להשתמש ב-queryId כדי לעקוב אחר פעולות — הוא כלול בהודעות תגובה ומאפשר להתאים בין בקשה לתוצאה.
איך לשלב בוט עם 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 — הוא תומך בתרחישי ניתוב מורכבים יותר ובאינטגרציית API טובה יותר.
קבלת הצעות מחיר (Quotes)
const pool = await router.getPool({
token0: "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c", // TON
token1: USDT_JETTON_ADDRESS
});
const data = await pool.getData();
// data.reserve0, data.reserve1 — текущие резервы
// Рассчитываем ожидаемый output через AMM формулуה-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") ); לחישוב החלקה (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
});
const pool = await router.getPool({ token0: "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c", // TON token1: USDT_JETTON_ADDRESS }); const data = await pool.getData(); // data.reserve0, data.reserve1 — текущие резервы // Рассчитываем ожидаемый output через AMM формулу הוא פרמטר קריטי למעקב. הוא כלול בהודעות תגובה ומאפשר להתאים בין בקשת ההחלפה לתוצאה במודל האסינכרוני.
| היבט | EVM | TON |
|---|---|---|
| מודל | סינכרוני (הכל בבלוק אחד) | אסינכרוני (הודעות) |
| מעקב | קבלת עסקה (tx receipt) | מכונת מצבים + בדיקות תקופתיות |
| גז | מראש, ביטול אם לא מספיק | עמלות העברה לאורך השרשרת |
| החלקה (SLIPPAGE) | פחות קריטית | קריטית עקב עיכובים |
איך לבנות ארכיטקטורת בוט מסחר עבור TON
מנטר מחירים: בדיקות תקופתיות של מחירים דרך STON.fi API (getExpectedOutputs()) או בקשות ישירות על השרשרת. ה-API נוח יותר — הוא מחזיר נתונים מנורמלים עבור כל הבריכות. על השרשרת אמין יותר כאשר ה-API אינו אמין.
מנוע אסטרטגיה: לוגיקה להחלטות מסחר. עבור בוט ארביטראז' — השוואת מחירי STON.fi עם DEX אחרים ב-TON (DeDust). עבור בוט עוקב מגמה — אינדיקטורים טכניים על מחירים היסטוריים מה-API.
מנהל עסקאות: תור עסקאות עם לוגיקת ניסיון חוזר. TON דורש seqno נכון עבור הארנק — שליחה מקבילה מובילה לשגיאות. אנו שולחים עסקאות ברצף או דרך ארנקי משנה נפרדים.
מעקב תוצאות: בדיקת העסקאות האחרונות של הארנק דרך TON API כדי לאשר ביצוע החלפה. 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 });
ניהול גז ב-TON
TON משתמש במודל גז שונה מאת'ריום. עבור החלפת jetton, יש לשלוח מספיק TON כדי לשלם עמלות העברה לאורך שרשרת ההודעות: נתב → ארנק jetton → ארנק משתמש. ה-STON.fi SDK מחזיר את queryId הנכון ב-https://api.ston.fi/v1/pools — אל תפחית אותו "כדי לחסוך". אם הגז אינו מספיק, ההודעה פשוט לא תגיע ליעדה, וכספים עלולים להיתקע בחוזה ביניים. אופטימיזציה של גז יכולה לחסוך עד 30% בעמלות, ועלות פיתוח קבועה מונעת חריגות תקציב.
מה כוללת העבודה שלנו
| שלב | משך | תוצאה |
|---|---|---|
| ניתוח דרישות ואסטרטגיה | יום אחד | מפרט טכני |
| עיצוב ארכיטקטורה | 1–2 ימים | מסמך ארכיטקטורה |
| אינטגרציית SDK ופיתוח לוגיקה | 2–4 ימים | בוט עובד עם ניטור |
| בדיקות (יחידה, אינטגרציה, fuzzing) | 1–2 ימים | דוח בדיקות |
| פריסה והדרכת צוות | יום אחד | גישה, תיעוד, הוראות |
כל העבודה מתבצעת במפתח מלא עם אחריות של 30 יום על כל באג שיתגלה. אנו משתמשים באימות פורמלי עבור חוזים קריטיים.
הניסיון והערבויות שלנו
- ניסיון בפיתוח Web3 מאז 2019, מעל 10 פרויקטים על TON/STON.fi
- ערבות אבטחה: הקוד נבדק עם Slither, Mythril ו-Echidna
- מהנדסים מוסמכים (Ethereum, Solana, TON)
- חיסכון של עד 30% בעמלות באמצעות אופטימיזציית גז
צור קשר להערכת הפרויקט שלך. נציע פתרון אופטימלי במפתח מלא תוך 1–2 שבועות. קבל ייעוץ לאינטגרציה עוד היום.
קישורים:







