רוב בוטי המסחר של Solana נכשלים לא בגלל האלגוריתם, אלא בגלל שהעסקאות שלהם מגיעות לסוף התור. עמלת עדיפות מחושבת שגויה מבטלת את היתרון של רשת מהירה. Solana מעבדת תיאורטית 65,000 TPS עם סופיות של ~400 אלפיות השנייה, אבל ללא כוונון עדין של יחידות מחשוב ועמלות, אתה נופל מאחורי המתחרים. לעיתים קרובות לקוחות מגיעים עם אלגוריתם מוכן, אבל העסקאות שלהם נתקעות לדקות, או שהם משלמים יתר על המידה 0.2 SOL לעסקה באמצעות מגבלות מנופחות. אנו פותרים זאת על ידי בחירה דינמית של עמלות בהתבסס על אחוזונים, וחוסכים עד 30% מהתקציב. לאורך השנים, המהנדסים שלנו סיפקו למעלה מ-30 פרויקטי DeFi של Solana, עם זמן השהייה ממוצע של בוט של 30 אלפיות השנייה.
כיצד פועל מודל העסקאות של Solana ומה ההבדל מ-EVM
ב-Ethereum, מחיר הגז קובע עדיפות. ב-Solana, העדיפות תלויה בשילוב של יחידות מחשוב (CU) ועמלת עדיפות. יחידות מחשוב הן אנלוגיה לגז, מגבלת המשאבים החישוביים לכל עסקה (מקסימום 1.4M CU). עמלת עדיפות היא תשלום נוסף ב-lamports לכל יחידת מחשוב. הגדרה נכונה של פרמטרים אלה היא המפתח לביצוע מהיר של הזמנות.
לפי קרן Solana, סופיות ממוצעת היא ~400 אלפיות השנייה. עם זאת, ללא הכוונון העדין שלנו, לא תשיג מדד זה.
הוראות חיוניות לבוט תחרותי:
import { ComputeBudgetProgram } from "@solana/web3.js";
// Устанавливаем лимит CU (важно: не больше чем нужно)
const setComputeLimit = ComputeBudgetProgram.setComputeUnitLimit({
units: 200_000, // обычно для swap достаточно 100k-200k
});
// Устанавливаем priority fee
const setPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({
microLamports: 100_000, // 0.1 lamport per CU = 0.02 SOL на 200k CU
});
transaction.add(setComputeLimit, setPriorityFee, ...swapInstructions);אם מגבלת CU מחושבת נמוך מדי, העסקה נכשלת עם import { ComputeBudgetProgram } from "@solana/web3.js"; // Устанавливаем лимит CU (важно: не больше чем нужно) const setComputeLimit = ComputeBudgetProgram.setComputeUnitLimit({ units: 200_000, // обычно для swap достаточно 100k-200k }); // Устанавливаем priority fee const setPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 100_000, // 0.1 lamport per CU = 0.02 SOL на 200k CU }); transaction.add(setComputeLimit, setPriorityFee, ...swapInstructions); . גבוה מדי — תשלום יתר ועדיפות מופחתת (מאמתים מייעלים תפוקה לפי יחס עמלה/CU). אנו משתמשים בחישוב דינמי של עמלת עדיפות באמצעות שיטת RPC exceeded compute budget, ובוחרים באחוזון 75-90 לעדיפות מקסימלית. חיסכון אופייני בעמלות בגישה זו הוא עד 30% בהשוואה לתעריף קבוע.
כיצד להגדיר עמלת עדיפות נכון? (שלבים)
- קבל עמלות עדכניות דרך
getRecentPrioritizationFees. - בחר אחוזון יעד (לדוגמה, ה-90).
- הגדר
getRecentPrioritizationFeesב-microLamports. - הוסף את ההוראה לעסקה לפני פעולות אחרות.
Jupiter: אגרגציית מסלולים
Jupiter הוא אגרגטור הנזילות הסטנדרטי ב-Solana, המשלב את Raydium, Orca, Meteora, ולמעלה מ-20 DEX/AMM נוספים. API v6 הוא העדכני ביותר.
Quote API
const quote = await fetch(`https://quote-api.jup.ag/v6/quote?` + new URLSearchParams({
inputMint: "So11111111111111111111111111111111111111112", // SOL
outputMint: USDC_MINT,
amount: "1000000000", // 1 SOL в lamports
slippageBps: "50", // 0.5%
onlyDirectRoutes: "false",
maxAccounts: "64", // ограничение аккаунтов в транзакции
}));
const quoteData = await quote.json();
הפרמטר ComputeBudgetProgram.setComputeUnitPrice הוא קריטי: עסקת Solana יכולה להכיל לא יותר מ-64 חשבונות ייחודיים. מסלול מורכב דרך מספר פרוטוקולים מסתכן בחריגה מהמגבלה, וגורם לשגיאת const quote = await fetch(`https://quote-api.jup.ag/v6/quote?` + new URLSearchParams({ inputMint: "So11111111111111111111111111111111111111112", // SOL outputMint: USDC_MINT, amount: "1000000000", // 1 SOL в lamports slippageBps: "50", // 0.5% onlyDirectRoutes: "false", maxAccounts: "64", // ограничение аккаунтов в транзакции })); const quoteData = await quote.json(); . אנו בוחרים אוטומטית מסלול שמתאים למגבלה זו, תוך ויתור על אופטימליות אך הבטחת ביצוע.
ביצוע החלפה
const swapResponse = await fetch("https://quote-api.jup.ag/v6/swap", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
quoteResponse: quoteData,
userPublicKey: wallet.publicKey.toString(),
wrapAndUnwrapSol: true,
dynamicComputeUnitLimit: true,
prioritizationFeeLamports: "auto",
}),
});
const { swapTransaction } = await swapResponse.json();
const tx = VersionedTransaction.deserialize(Buffer.from(swapTransaction, "base64"));
tx.sign([wallet]);
const txid = await connection.sendRawTransaction(tx.serialize(), {
skipPreflight: false,
maxRetries: 3,
});בסביבת ייצור, אנו ממליצים להפעיל maxAccounts: 64 — Jupiter מדמה את העסקה ומגדיר את מגבלת CU האופטימלית בעצמו.
Raydium: אינטגרציה ישירה
לפעולות רגישות לזמן השהייה, אינטגרציה ישירה עם Raydium CLMM (יצרן שוק עם נזילות מרוכזת) מהירה יותר מאשר דרך Jupiter. אנו משתמשים ב-SDK v2:
import { Raydium, TxVersion } from "@raydium-io/raydium-sdk-v2";
import { PublicKey } from "@solana/web3.js";
const raydium = await Raydium.load({
owner: wallet,
connection,
disableFeatureCheck: true,
});
const poolInfo = await raydium.clmm.getPoolInfoFromRpc(POOL_ID);
const { transaction } = await raydium.clmm.swap({
poolInfo,
ownerInfo: { useSOLBalance: true },
inputMint: new PublicKey(INPUT_MINT),
amountIn: new BN(amount),
amountOutMin: new BN(minAmountOut),
observationId: poolInfo.observationId,
txVersion: TxVersion.V0,
});עסקאות עם גרסה (V0) עם טבלאות חיפוש כתובות (Address Lookup Tables) הן חובה למסלולים מורכבים עם מספר קפיצות. הן מאפשרות לכלול יותר חשבונות באמצעות דחיסת ALT.
מהן עסקאות עם גרסה?
עסקאות עם גרסה הן פורמט עסקאות חדש של Solana שהוצג ב-2022. בניגוד לפורמט הישן, הן תומכות בטבלאות חיפוש כתובות (ALT) — רשימות חשבונות שנטענו מראש. זה מקטין את גודל העסקה ועוקף את מגבלת 64 החשבונות. הבוטים שלנו משתמשים ב-V0 למסלולים מורכבים.כיצד להפחית זמן השהייה לאלפיות השנייה
לבוט תחרותי, זמן השהייה נמדד באלפיות השנייה, לא בשניות. הנה שלוש שיטות מפתח:
- צרור Jito. Jito היא תשתית MEV ב-Solana. צרור עסקאות נשלח ישירות למנוע הבלוקים של Jito, תוך עקיפת gossip רגיל. זה מבטיח ביצוע אטומי ואת החריץ הראשון בבלוק. טיפ מינימלי הוא 0.001 SOL, ובמציאות 0.01-0.1 SOL בתנאים תחרותיים.
import { searcherClient } from "jito-ts/dist/sdk/block-engine/searcher";
const client = searcherClient(JITO_BLOCK_ENGINE_URL, keypair);
const bundle = new Bundle([tx1, tx2], 5);
await client.sendBundle(bundle); -
תוסף Geyser / Yellowstone. לניטור נתונים בזמן אמת בשרשרת, אנו משתמשים ב-Geyser gRPC (Yellowstone). זמן השהייה של 5-20 אלפיות השנייה לעומת 200-500 אלפיות השנייה עם שאילתות RPC סטנדרטיות.
-
מיקום גיאוגרפי. שרתי המאמתים של Solana מרוכזים במרכזי נתונים ספציפיים. הצבת הבוט שלך בקרבת מקום (אמסטרדם, פרנקפורט, אשבורן) מפחיתה את זמן השהיית הרשת ב-10-50 אלפיות השנייה.
ניטור וניהול סיכונים
אנו בונים מעקב עסקאות באמצעות מנוי WebSocket — מהיר יותר משאילתות. סטטוסים: processed → confirmed → finalized. בשגיאת TooManyAccounts, אנו מביאים אוטומטית blockhash חדש ומנסים שוב. ב-const swapResponse = await fetch("https://quote-api.jup.ag/v6/swap", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ quoteResponse: quoteData, userPublicKey: wallet.publicKey.toString(), wrapAndUnwrapSol: true, dynamicComputeUnitLimit: true, prioritizationFeeLamports: "auto", }), }); const { swapTransaction } = await swapResponse.json(); const tx = VersionedTransaction.deserialize(Buffer.from(swapTransaction, "base64")); tx.sign([wallet]); const txid = await connection.sendRawTransaction(tx.serialize(), { skipPreflight: false, maxRetries: 3, }); , אנו מחשבים מחדש הצעת מחיר עם נזילות עדכנית. ההון מחולק בין keypairs נפרדים לכל אסטרטגיה; כספים לטווח ארוך נשמרים בארנק חומרה או KMS.
השוואת גישות: Jupiter API לעומת אינטגרציה ישירה
| פרמטר | Jupiter API | אינטגרציה ישירה (Raydium SDK) |
|---|---|---|
| אופטימליות מסלול | גבוהה (20+ DEX) | נמוכה יותר (פרוטוקול יחיד) |
| זמן השהיית הצעת מחיר | ~100-200 אלפיות השנייה | ~20-50 אלפיות השנייה (על השרשרת) |
| תחזוקה | מינימלית | עדכוני SDK |
| מורכבות | נמוכה | גבוהה |
| התאמה אישית | מוגבלת | מלאה |
עבור רוב הבוטים, Jupiter API היא הבחירה הנכונה: מחירים טובים ביותר, פחות קוד. אינטגרציה ישירה עם Raydium נדרשת רק כאשר יש צורך בזמן השהייה מתחת ל-50 אלפיות השנייה או באינטראקציה ספציפית עם בריכה (ניהול LP, הזמנות טווח עם נזילות מרוכזת).
מה כלול בפיתוח מפתח מלא
אנו מספקים מחזור מלא:
- אנליטיקה ובחירת אסטרטגיה (2-3 ימים): הגדרת דרישות זמן השהייה, נפח ומחסנית.
- פיתוח ליבת הבוט (1-2 שבועות): ניטור WebSocket, מנוע הצעות מחיר, ביצוע עם עמלות עדיפות, צרור Jito (אופציונלי).
- ניהול סיכונים וניטור (3-5 ימים): הגנה מפני החלקה, טיפול אוטומטי בשגיאות, התראות Telegram, מדדים.
- אופטימיזציה (3-5 ימים): פרופיל זמן השהייה, כוונון CU ועמלת עדיפות תחת תעבורה אמיתית.
- תיעוד והדרכה: העברת קוד, תיעוד ארכיטקטוני, הגדרת לוח מחוונים.
- תמיכה לאחר ייצור: חודש אחד של תחזוקה לאחר ההשקה.
הערכות זמנים
| סוג בוט | זמן |
|---|---|
| בסיסי (Jupiter API, עמלת עדיפות אוטומטית) | החל משבוע אחד |
| תחרותי (צרור Jito, Geyser, אסטרטגיות מותאמות) | 2-3 שבועות |
התמחור מחושב באופן אישי לפי מורכבות ודרישות תשתית. המהנדסים שלנו עם שנים של ניסיון במערכת האקולוגית של Solana יעריכו את הפרויקט שלך ויציעו את הפתרון האופטימלי. צור קשר כדי לדון בפרטים ולקבל ייעוץ.
טעויות נפוצות בפיתוח בוטים
- התעלמות מעמלת עדיפות — עסקאות נתקעות לדקות.
- שימוש מופרז ב-CU — תשלום יתר ללא רווח עדיפות.
- ללא טיפול בשגיאות — כספים תקועים במקרה של כשל בצומת.
- אחסון מפתחות פרטיים על השרת — סיכוני פריצה.
הזמן פיתוח בוט לאסטרטגיה שלך — קבל ייעוץ והערכה ראשונית.







