בוט Telegram לסוואפים: היכן נשברת ההחלפה
סוואפ בבוט Telegram נראה פשוט: המשתמש בוחר זוג, מאשר — ומקבל נכס. בפועל העסקה עוברת דרך כמה מצבים בלתי תלויים, ובכל אחד מהם אפשר לאבד אותה.
הסירוב הנפוץ ביותר — החלקת מחיר: בין הצגת הציטוט לאישור, הרזרבות בבריכה משתנות, ובזוגות דקים הזמנה גדולה מזיזה את המחיר חזק יותר ממה שהמשתמש מוכן לקבל.
נקודת כשל שנייה — פעולה תקועה. העסקה חתומה ויצאה לרשת, אבל העמלה התבררה נמוכה מהשוק, אין אישור, והבוט כבר הציג סטטוס "בטיפול". המשתמש רואה חיוב, היתרה לא השתנתה, והוא פונה לתמיכה: פורמלית הכספים לא אבדו, אבל העסקה לא התקיימה.
התרחיש השלישי והיקר ביותר — קטיעת מסלול באמצע הדרך. החלפת קריפטו בבוט לעתים רחוקות הולכת ברגל אחת: המסלול נבנה דרך שניים-שלושה בריכות, לפעמים עם נכס ביניים. אם הרגל הראשונה בוצעה והשנייה נכשלה, הכספים נתקעים בטוקן ביניים, ואת זה צריך לפתור ידנית.
עבור המזמין זה לא מושג מופשט: החלפות כושלות — אלו עגלות נטושות, זרם פניות לקו ראשון ומוניטין של הבוט, שמשקמים אותו חודשים. אנו מפרקים כיצד התרחישים האלה נסגרים ברמת המכניקה: בקרת החלקה, פסקי זמן וביטול, אטומיות המסלול.
אפקט ההטמעה: מהירות החלפה, כשלים, השבתות
מהירות החלפה
צוואר בקבוק — לא הרשת עצמה, אלא השרשרת "ציטוט → אישור → חתימה → שליחה". אנו מחזיקים חיבורים מחוממים לצמתים ומבקשים ציטוטים במקביל, לכן הבוט ב-Telegram מגיב תוך 1–2 שניות במקום שבו מסלול ידני ארך 10–15. המשתמש לא הולך לחכות בצ'אט אחר, והמחיר המוצג תואם למחיר שבוצע.
חלק ההחלפות הכושלות
סירובים נובעים מהחלקת מחיר, חוסר כספים לעמלה ופסק זמן לאישור. ניסיון חוזר עם חישוב מסלול מחדש, בדיקת יתרה לפני שליחה ורזרבה לעמלה מעבירים את חלק ההחלפות הכושלות מעשרות אחוזים ליחידות. על כל עסקה נשאר האש וסטטוס מובן — בירור מקרה שנוי במחלוקת אורך דקות.
אוטומציה של תשלומים
תור לתשלומים, אידמפוטנטיות של פעולות ובחירה אוטומטית של עמלה מסירים עבודה ידנית: קבוצות משיכות יוצאות בלי מפעיל, ועסקה תקועה נתפסת בניסיון חוזר בלי ליצור כפילות. חלונות לילה ועומס נסגרים באותו קוד כמו ביום.
השבתת השירות
השבתה בשעות שיא בדרך כלל קשורה לצומת יחיד ולמגבלות של מקור הציטוטים. גיבוי צמתים, כמה מקורות מחיר והדרדרות במקום קריסה מחזיקים את השירות מחובר: חלק מהמסלולים מנותקים, ההחלפה נמשכת. עדכונים יוצאים צומת-צומת — הבוט לא יוצא לאופליין.
אפשרויות ביצוע ההחלפה: השוואת גישות
תבנית הביצוע קובעת מאיפה הבוט לוקח שער, כיצד בונה את ניתוב ההחלפה ומה עושה כשהמקור לא זמין. את האפשרות מקבעים בשלב התכנון — ממנה תלויים לוגיקת האישורים, דרישות לאחסון מפתחות והתנהגות המערכת בכשל.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| בריכה ישירה | זוג אחד-שניים עם עומק מספיק, הזמנות גדולות, מינימום תלויות חיצוניות | השער נשחק משמעותית בהחלקה; בזוגות נדירים הנזילות דקה, הזמנה גדולה מזיזה את המחיר בעצמה |
| אגרגטור נזילות | זוגות רבים, נדרש שער טוב בלי סט מקורות משלך | תלות בשירות חיצוני: עיכובי תגובה, מגבלות בקשות, חלק מהמסלול לא שקוף |
| נתב משלנו | זוגות בתדירות גבוהה, נדרש שליטה על נתיב ההחלפה והחזקת עמלה | יקר יותר בתמיכה: איזון מחדש של רזרבות, בקרה מתמדת של מצב המקורות, קשה יותר לבדיקה |
| תבנית קסטודיאלית | הפקדה ומשיכה מחוץ לרשת, ממשק פשוט למתחיל | כספים בחשבונות המפעיל — דרישות מחמירות יותר למפתחות, חלק מהפעולות ידניות, נוספות מגבלות רגולטוריות |
בפועל לעתים רחוקות לוקחים אפשרות אחת בצורתה הטהורה. לעתים קרובות יותר מרכיבים היברידי: אגרגטור נזילות כמקור שער בסיסי, נתב משלנו בזוגות עם זרימה קבועה ומעגל קסטודיאלי כגיבוי להזמנות גדולות.
הצירוף הזה נותן ביצוע צפוי ותרחיש מובן כשהמקור מחזיר שגיאה: המסלול נבנה מחדש וההחלפה עוברת דרך ערוץ גיבוי בלי מעורבות המשתמש.
כיצד עוברת ההטמעה: שלבי עבודת הנדסה
הביקורת מתחילה לא מהקוד, אלא מהאופן שבו הנכסים באמת נעים בין ארנקים, בורסות ורשתות. בשלב הזה אנו מקבעים מקומות שבהם עסקה עלולה להיתקע, ומסכמים על קריטריוני קבלה: איזה חלק מהפעולות עובר בניסיון ראשון ובאיזה זמן.
- ביקורת תשתית. בודקים גישות לצמתי הרשת, אחסון מפתחות, מגבלות ספקים ויומני תקלות קודמות. בפלט — רשימת צווארי בקבוק שאי אפשר לסגור רק בקוד.
- תרשים זרימות נכסים. מפרקים כיצד הטוקן יוצא מהמשתמש, דרך אילו בריכות עובר ולאן חוזר. התרשים מראה היכן החתימה נשארת אצל המשתמש והיכן השירות שולט בה.
- הגדרת מסלולים. קובעים מקורות ציטוטים, עדיפות בריכות, סף החלקה והתנהגות בפער מחיר. המסלול מתחלף מעצמו, בלי התערבות ידנית ברגע העסקה.
- הרכבת לוגיקת הבוט. דיאלוג, אישור עסקה, סטטוסים, התראות, ניסיונות חוזרים בשגיאת רשת. כל תרחיש בנוי כך שהמשתמש בכל רגע רואה היכן נמצאים כספיו.
- מעגל בדיקות. מריצים מסלולים ברשת בדיקה, ואחר כך במגבלות מוגבלות. בודקים לא רק עסקאות מוצלחות, אלא גם סירובים, פסקי זמן, חתימות חוזרות.
- מסירה לתפעול. מוסרים קונפיגורציות, תרשים, הוראות ניטור ונוהל שחזור. בנפרד מראים כיצד לשנות מסלולים ומגבלות בלי לערוך קוד.
ארטיפקטים של הטמעה: קונפיגורציות, תרשימים, נהלים
חבילת המסירה — לא תיקייה עם מצגת, אלא ערכה עובדת במאגר שלכם: עם היסטוריית שינויים, הרשאות עריכה ויכולת להקים סביבה מאפס בלי העזרה שלנו. כל ארטיפקט סוגר שכבה משלו — הגדרות, מסלולים, גישות, תפעול.
- קונפיגורציית הבוט. קובץ הגדרות עם רשימת רשתות וטוקנים נתמכים, מגבלות לגודל פעולה, ספי החלקה ופסקי זמן להמתנה לאישור — משתנה בעריכת ערכים, בלי לבנות מחדש את התמונה.
- תרשים מסלולים. דיאגרמה של נתיב ההזמנה מפקודה בצ'אט עד חתימת העסקה: אילו מקורות נזילות נשאלים, באיזה סדר, היכן נדלק מסלול גיבוי כשהראשי נכשל.
- מדיניות גישה למפתחות. היכן נשמרים מפתחות החתימה, מי ובאיזה הליך מקבל אותם, כיצד מופרדים תפקידי מפעיל ומנהל, כיצד מוגדרים רוטציה ושלילת גישה.
- תרשים פריסה. הפרדה בין מעגל בדיקה למעגל ייצור, רשימת משתני סביבה, נקודות שחזור לגרסה קודמת ונוהל החזרתה.
- נוהל תחזוקה. רשימת בדיקות שגרתיות: יתרת טוקן נייטיבי לעמלות, עומק תור ההזמנות, פיגור הצומת אחרי הרשת, בירור עסקאות שנדחו.
- תיעוד והתראות. אילו אירועים נכתבים, באיזו רמת פירוט, אילו ספים מעלים התראה לתורן.
- תרחישי קבלה. סט בדיקות עם תוצאה צפויה: החלפה מוצלחת, חוסר נזילות, פסק זמן לאישור, שליחה חוזרת.
הערכה מועברת עם זכות עריכה וללא תלות בנו: מהנדס בצוות שלכם פורס את הבוט לפי המסמכים האלה וממשיך להפעיל אותו בעצמו.
מקרה בוחן: כיצד גדל חלק ההחלפות המוצלחות
הבוט תחילה הלך לציטוט במקור נזילות אחד. בזוגות דקים לא היה מספיק עומק, וההחלפה נפלה כבר אחרי אישור המשתמש, ובצ'אט הופיע אותה הודעה "לא הצלחתי לבצע את ההחלפה". כל מקרה כזה מהנדסים פירקו ידנית: השוו האשים של עסקאות, מצב הבריכה והרשאת הטוקן לחיוב.
קודם כל, קבלת המחיר הועברה לאגרגטור 1inch — הוא בעצמו בונה מסלול דרך כמה בריכות ומפצל נפח גדול לחלקים. לפני השליחה הבוט שואל שוב ציטוט ומחשב מחדש את הסכום המינימלי לקבלה, והיתרה והרשאת הטוקן נבדקות מראש, לפני החתימה — המשתמש רואה סיבה, לא שגיאה מופשטת.
בנפרד טיפלו בתגובה: בקשות כבדות לרשת עברו למשימות רקע, לכן הבוט מגיב לפקודה מיד, ולא אחרי קבלת המחיר. תוצאה בשלושה מדדים:
| מדד | לפני | אחרי |
|---|---|---|
| חלק ההחלפות המוצלחות | 78% | 97% |
| זמן תגובת הבוט | 9 שנ' | 2 שנ' |
| בירורים ידניים ביום | 40+ | בודדים |
כדי שהתוצאה לא תתגלגל לאחור, על חלק הכשלים שמו התראות, כל שלב במסלול נכתב ללוג, ותרחישים עם חוסר נזילות סגורים בבדיקות אוטומטיות. התמיכה עברה מבירור עסקאות תקועות לשאלות על המוצר.
במה שונה סוואפ ישיר מניתוב דרך אגרגטור?
סוואפ ישיר — זו עסקה אחת עם בריכת נזילות אחת: הבוט שולח עסקה, והחוזה מחליף טוקן A בטוקן B לפי יחס הרזרבות הנוכחי. אגרגטור עובד אחרת: תחילה בונה מסלול, מפצל את הסכום בין כמה בריכות ופלטפורמות, לפעמים בשרשרת A → B → C, ורק אחר כך מרכיב מזה עסקה אחת.
ההבדל נראה קודם כל במחיר הביצוע. סוואפ ישיר נותן את היחס שקיים בבריכה, ובסכום גדול הוא נשחק ביחס לחלק שאתם לוקחים מהרזרבה. אגרגטור מסכם נזילות מכמה מקורות, לכן המחיר הסופי בנפח בינוני וגדול בדרך כלל טוב יותר — אבל מתווספת אליו עמלת האגרגטור עצמו ועמלות כל בריכה במסלול.
מהירות ויציבות ההחלפה בנויות אחרת. סוואפ ישיר צפוי: קריאה אחת, צריכת עמלת רשת מובנת, מינימום מקומות שבהם העסקה עלולה ליפול.
מסלול דרך אגרגטור ארוך יותר, וככל שיש בו יותר מעברים, כך עולה הסיכוי שעד רגע ההכללה בבלוק חלק מהבריכות כבר השתנו והעסקה תיפול בגלל חריגת החלקה — במיוחד בנזילות דקה של טוקן לא נזיל.
לכן בבוט אנחנו לא מקבעים שיטה אחת לנצח, אלא קובעים כלל לזרימה מסוימת: עד סף מסוים ובזוג נזיל הולך סוואפ ישיר, מעל הסף או בעומק בריכה קטן — ניתוב דרך אגרגטור עם הגבלת החלקה מותרת ובדיקה חוזרת של הסכום ביציאה.
אם המסלול לא נבנה, הלוגיקה מתגלגלת חזרה לסוואפ ישיר או מקטינה את הנפח, והמשתמש רואה לא שגיאה, אלא החלפה שבוצעה.
אבטחת מפתחות, מגבלות ועמידות בכשלים
הספק הטכני הנפוץ ביותר לגבי בוט סוואפים — לא הממשק, אלא מי יכול להורות על הכספים ומה יקרה בכשל של שירות חיצוני. להלן — נקודתית בכל סעיף: אחסון מפתחות, מגבלות החלפה, עמידות בכשלים.
היכן נשמרים המפתחות ולמי יש אליהם גישה?
מפתחות לא נמצאים במסד הנתונים של הבוט ולא נכתבים ללוגים. החתימה מתבצעת בשירות חותם מבודד: המפתח מפוענח בזיכרון רק למשך הרכבת העסקה ולא יוצא ממנה. כל פנייה נרשמת ביומן — רואים מי ובאיזו עסקה ביקש חתימה. בתבנית לא-קסטודיאלית המפתח נשאר אצל הבעלים, והבוט רק יוזם את ההחלפה.
כיצד פועלות מגבלות ההחלפה ומה קורה בחריגה מהן?
מגבלות מוגדרות בשלוש רמות: לעסקה אחת, למחזור יומי של משתמש ומפסק מגן כולל לכל הפעולות. בחריגה הפעולה לא נדחית בשקט — היא עוברת לאישור ידני עם התראה למנהל. הספים משתנים בקונפיגורציה, בלי בנייה מחדש והשבתת השירות.
מה אם שירות חיצוני — בריכה, צומת רשת, בורסה — לא זמין?
העסקה מנוהלת לפי יומן מצבים, לכן כשל בכל שלב לא מאבד נתונים. הבוט חוזר על הבקשה בהשהיה גדלה, ולפני ניסיון חוזר משווה מצב לפי מזהה הפעולה — עסקה כפולה לא תישלח. אם השירות שותק יותר מהסף שנקבע, העסקה מסומנת ככזו שדורשת תשומת לב, הכספים נשארים במצב ידוע, והמנהל מקבל התראה. לאחר ההתאוששות העיבוד ממשיך מאותה נקודה.
נדבר על המשימה: שלחו תיאור של זרימת ההחלפה
כדי לחזור עם הערכת פיתוח הבוט, ולא עם מילים כלליות, אנחנו צריכים את השקפתכם על ההחלפה עצמה. להלן מה שבדרך כלל סוגר את רוב השאלות; אם משהו עדיין חסר, די לתאר במילים איך זה עובד עכשיו.
- תיאור זרימת ההחלפה: מאיזו רשת וטוקן המשתמש מגיע, לאיזו יוצא, מהיכן הבוט לוקח נזילות ובאיזה מסלול מעביר את העסקה.
- כללי ציטוט: כיצד מחושב השער, איזה טווח מחיר מותר אנחנו מניחים, מה מציגים בתנועה חדה בשוק.
- התנהגות בכשל: מה עושים אם ההחלפה לא עברה או עברה חלקית — מי רואה סטטוס, מה מקבל המשתמש, כיצד מחזירים את הפעולה לאחור.
- ממשק הבוט: סט פקודות וכפתורים, עבודה בצ'אט פרטי או בקבוצה, האם דרושים תפקידים ופאנל ניהול.
- חיבור ארנקים: אילו צריכים להיות נתמכים והאם המשתמש חותם על הפעולה אצלו.
- דרישות הגנה: מגבלות על פעולות, אנטי-פראוד, יומן פעולות, הפרדת גישות.
- מה כבר קיים: קוד נוכחי, תרשימים, לוגים, מעגל בדיקות — תגידו מה נשתמש מחדש.
תארו את המשימה בצורה חופשית, צרפו תרשים זרימה אם יש — נדון בו לעניין. הערכת פיתוח הבוט נבנית לפי תיאור זרימת ההחלפה: ככל שהוא מפורט יותר, כך פחות הבהרות ועבודות מחדש בהתחלה. נחזור עם תוכנית עבודה, הרכב שלבים וזמנים.







