פיתוח AMM DEX על Uniswap V2/V3 עם ביקורת חוזים

בונים מחליף על עושה שוק אוטומטי וחוששים שהבריכה תישבר בתנועת מחיר חדה? אנו מפתחים AMM DEX מקצה לקצה: מתכננים מכניקת בריכה, כותבים ובודקים חוזים, ומלווים עד להשקה. הלקוח מקבל מערכת עובדת עם התנהגות צפויה ומסירת תיעוד.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1375
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1349
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    794
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1087
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1032
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1129

פיתוח AMM DEX: היכן נשברת המכניקה של הפול

מעגל ההחלפה נשען על הנחה אחת: היתרות הנספרות של הזוג שוות ליתרות בפועל של הטוקנים בכתובת שלו. ברגע שזה מפסיק להתקיים, הנוסחה מחשבת שער לפי מצב שלא קיים בשוק — ופיתוח AMM DEX מתחיל בדיוק בבדיקה של ההנחה הזו.

המקור הראשון לכשל הוא חוסר סנכרון ביתרות: העברת טוקן לכתובת הזוג שלא דרך ההחלפה, עדכון מחיר באמצעות אורקל חיצוני בטרנזקציה נפרדת, שאריות משריפת נזילות. במודל Uniswap זה מטופל בהשוואת יתרות לפני ההחלפה, ובנזילות מרוכזת — בגבולות מדויקים של טווחים, אחרת חלק מההון נופל מחוץ למסחר.

האזור השני הוא התערבות ידנית במחיר. מפסקי עמלה והשהיה שמופעלים באותה טרנזקציה עם ההחלפה הופכים הפסדים על החלקה מגודל מחושב להגרלת מזל: ההזמנה נאספת לפי שער אחד ומבוצעת לפי אחר.

השלישי — חולשות בחוזה ההחלפה בהרשאות גישה: הטבעה ושריפה בלי מודל תפקידים, משיכת טוקנים מהזוג, חתימות בלי הגנה מפני שימוש חוזר, היעדר תקרה ליציאה מינימלית ולתוקף ההזמנה. הנוסחה עצמה יכולה להיות מושלמת.

הרביעי — השקה בלי בדיקות: בלי בדיקות אינווריאנטיות, בלי סימולציה של מניפולציה במחיר בתוך בלוק אחד ובלי תרחישי נסיגה של הפול. התוצאה — מחיר החלפה בלתי צפוי; נפרק כיצד כל אזור נסגר באמצעות תכנון, בדיקות וביקורת.

מה נותן DEX שנבנה בקפידה: אפקטים ולוחות זמנים

מעגל החלפה שנבנה נכון נמדד לא במספר הפונקציות, אלא בכמה פעולות מגיעות לתוצאה. שיעור ההחלפות שנכשלות נשאר בטווח של אחוזים בודדים: הסיבה כמעט תמיד אחת — החישוב מאבד עדכניות בין החתימה לבין הכנסת הטרנזקציה לבלוק. לכן סבילות ההחלקה מחושבת ממצב הפול הנוכחי, ולא מהמחיר ברגע הלחיצה.

את Uniswap אנחנו לוקחים בענפים העדכניים של הפרוטוקול — V2 עם עקומה אחידה ו-V3 עם נזילות מרוכזת, והבחירה משנה את פרופיל הסיכונים. ב-V2 המחיר הולך לפי נוסחה אחת, וטעות בהגדרת הפול מרוככת; ב-V3 הפוזיציות חיות בטווחים צרים, וצעד שגוי ברשת נותן החלקות חדות ושוחק את העומק במהירות.

ההגנה מפני מניפולציות מחיר נבנית על ערך ממוצע משוקלל על פני חלון זמן ועל בדיקות בלתי תלויות לפני ההחלפה: החוזה משווה יתרות, מגביל את גודל העסקה ביחס לעומק הפול ודוחה ביצוע לפי מחיר שסטה מהשוק. כך נסגר סוג הכשלים שבו מזיזים את הציטוט באמצעות הלוואה ויוצאים דרך הפול שלכם.

תחת עומס ההתנהגות צפויה: זמן התגובה של ההחלפה נשאר בשברירי שנייה, והאישור תלוי ברשת, לא בקוד החוזה. עמידות בתנודתיות נבדקת בבדיקות עומס על תנועות מחיר חדות — הן מראות היכן הפול מאבד עומק לפני שהמשתמש מבחין בכך.

אפשרויות השקה: פול עצמאי, פיצול Uniswap V2/V3, מעגל מוכן

שלוש דרכי השקה נבדלות לא בהיקף הקוד, אלא במי שמחזיק בנוסחת התמחור והיכן מתרכז הסיכון. פיצול של מודל מוכח — Uniswap V2/V3 — נותן מתמטיקת החלפה מוכנה ומשטח ברור לביקורת: נבדקות התיקונים שלכם, ולא כל הלוגיקה מאפס.

פול נזילות עצמאי דורש להרכיב את המתמטיקה הזו לפי הכללים שלכם, ומעגל החלפה מוכן סוגר את המשימה הכי מהר, אבל מותיר מעט חופש.

אפשרות מתי מתאימה מגבלות
פול נזילות עצמאי שצריך נוסחת מחיר משל עצמכם, רשת עמלות לא סטנדרטית, הצמדה למקור מחיר חיצוני כל המתמטיקה נבדקת לראשונה — הביקורת ארוכה ויקרה יותר בזמן, וטעות בנוסחה נראית רק על נפחים אמיתיים
פיצול של מודל החלפה מוכח שצריך השקה צפויה בלוחות זמנים לחוצים, והכללים תואמים את ציפיות המשתמשים יורשים את גבולות המודל: את מכניקת העמלות ואת מבנה הפולים אפשר לשנות רק נקודתית, אחרת אבד ההיגיון של בסיס מוכח
מעגל החלפה מוכן שצריך כניסה מהירה להחלפה עם פיתוח מינימלי הכללים ניתנים מבחוץ: הממשק והלוגיקה של החיובים ניתנים להגדרה מוגבלת, חלק מההחלטות לא תלויות בכם

בפועל את הבחירה מכתיבים לוחות הזמנים עד ההשקה ועד כמה הכלכלה שלכם חורגת מהטיפוסית. אם מודל ההחלפה צריך להתנהג באופן מוכר למשתמשים — הפיצול מנצח; לכללים משלכם לוקחים פול עצמאי; לכניסה מהירה — מעגל מוכן.

משם והלאה זה זהה: את גבולות המודל הנבחר מקבעים במפרט, והביקורת על החוזים בודקת את ההתנהלות עם הנזילות, את הרשאות המנהל ואת משיכת הכספים.

שלבי העבודה: מפירוק המכניקה ועד מסירת המעגל

את העבודה מובילים בצעדים קצרים וניתנים לבדיקה: אחרי כל שלב נשאר אצל המזמין חפץ מוחשי — תרשים, תצורת פול או דוח הרצה. להלן הסדר שלפיו מתנהל פיתוח AMM DEX על Uniswap V2/V3: פער בין המכניקה המתוכננת למימוש צף לפני ההשקה, ולא ברגע משיכות הנזילות הראשונות.

  1. פירוק מכניקת ההחלפה. מקבעים את נוסחת התמחור, את גובה העמלה ואת ההתנהגות בעת החלקה. בפלט — מפרט שלפיו נבדקים בהמשך החוזים.

  2. תרשים זרימות הנכסים. מראים מאיפה ולאן הולכים הכספים: הזרמת נזילות, החלפה, משיכה, עמלת הפרוטוקול. מסמנים מי ומתי יש לו גישה לכספים.

  3. הגדרת הפול והתפקידים. קובעים את פרמטרי הפול, הרשאות המנהל ומפתח נפרד להשהיית חירום. ההרשאות לא מתמזגות לארנק משותף אחד.

  4. בדיקת החוזים. מריצים תרחישי קצה: נזילות אפסית, החלפה בגבול ההחלקה המותר, כניסה חוזרת. משלימים בבדיקות עם כיסוי גבוה ובביקורת חיצונית, וסוגרים את ההערות לפני המסירה.

  5. הרצה על מעגל בדיקה. חוזרים על תרחישים אמיתיים עם כמה משתתפים: הוספת נזילות ומשיכתה, סדרת החלפות. משווים בין יתרות מחושבות ליתרות בפועל.

  6. מסירה להפעלה. מוסרים תיעוד, גישות ותקנון עדכון, ומראים כיצד לקרוא את מדדי הפול ומתי מופעלת ההשהיה.

מה נשאר אצל המזמין לאחר מסירת המעגל

פול נזילות עובד הוא רק חצי מהמסירה. החצי השני — ערכה שלפיה הצוות שלכם או קבלן אחר יוכל לפתח את המוצר ולהגיב לאירועים בלעדינו. להלן מה שנמסר לפי פרוטוקול.

  • תצורת המעגל — רשתות, כתובות של חוזים פרוסים, פרמטרי צמתים ומשתני סביבה. מכונה נקייה מרימה את המעמד לפי ההוראות, בלי הסברים בעל פה.
  • תרשימי זרימות הנכסים — נתיב הכספים מהזרמת הפול ועד המשיכה: כיצד נוצרים חלקי ספקי הנזילות, לאן הולכות העמלות, היכן נקודות המגע עם פלטפורמות חיצוניות.
  • מדיניות גישה ותפקידים — מי ומה יכול לקרוא לחוזה, כיצד מופרדות הרשאות המנהל, המפעיל והעצירה החירומית, היכן נשמרים המפתחות וכיצד הם מוחלפים.
  • תיעוד החוזים — ייעוד הפונקציות, האירועים, המגבלות והקשרים בין המודולים. מתווסף בדוח ביקורת עם רשימת ההערות שנסגרו.
  • תקנון עדכונים — סדר הוצאת גרסה חדשה, מי חותם, איזו בדיקה קודמת להפעלה. בנפרד מצוין אילו שינויים דורשים ביקורת חוזרת.
  • תקנון טיפול בתקלות — סימני אנומליה, סדר עצירת המעגל, האחראים ותבנית לניתוח אירוע. מאפשר לפעול לפי שלבים, ולא לפי הזיכרון.
  • מטריצת ניטור — התראות על תנועות נזילות חדות, עסקאות גדולות ושינוי הרשאות. מוגדרת לכלי ההתראות שלכם.

הערכה נמצאת במאגר אחד עם היסטוריית שינויים: כל חפץ ניתן להשוות למה שבאמת עובד ברשת. הקבלה מתנהלת לפי אותה רשימה — אתם בודקים קבצים, לא מילים.

מקרה בוחן: כיצד הוסרו ההפסדים בתנועות מחיר חדות

מעגל ההחלפה על פולים עם מכפלה קבועה ספג את הפגיעה החזקה ביותר דווקא בתנועות מחיר חדות. הציטוט שהמשתמש ראה בממשק התיישן בין חתימת הטרנזקציה לבין הכנסתה לבלוק: חלק מההחלפות חזרו בנסיגה בגלל תקרת סטיית המחיר, וחלקן בוצעו בשער גרוע בהרבה.

בשעות שיא שיעור ההחלפות המוצלחות ירד ל-78%, וההפסדים על החלקה גדלו יחד עם הנפח — ככל שהשוק פעיל יותר, כך כל פעולה עלתה יותר.

מכניקת החישוב הוצמדה למצב פול עדכני: סטיית המחיר מחושבת מהציטוט העדכני, ולא מזה שהוצג למשתמש, ולטרנזקציה נוסף מרווח זמן מתחדש לביצוע. חלק מהזוגות הועברו לנזילות מרוכזת — עומק בטווח צר מחזיק את השער בתנועה חדה, ולאחרים הועלתה צפיפות הנזילות סביב המחיר הנוכחי.

המעגל נבנה על פולים של Uniswap, והבדיקות כללו הדמיית אנומליות: דחיפת הפול בהזמנה גדולה אחת וסדרת הזמנות קטנות ברצף. החוזים לפני העלאה לרשת הראשית עברו ביקורת חיצונית, וההערות נסגרו לפני השחרור.

לאחר ההשקה שיעור ההחלפות המוצלחות בשעות שיא הגיע ל-99%+, ההפסדים על החלקה קטנו פי שלושה, ומספר הנסיגות ירד בסדר גודל. נעלם סוג שלם של כשלים — ביצוע לפי ציטוט מיושן; הפול לאחר תנועה אנומלית חוזר לעומק עבודה בתוך דקות, ולא בתוך עשרות דקות.

במה פול נזילות שונה מספר פקודות

בספר פקודות את המחיר יוצרות פקודות לימיט מנוגדות, ומרקט-מייקר מתחזק ציטוטים ועומק מסביב לשעון. בפול נזילות את המחיר קובע האינווריאנט של ההחלפה: ככל שנצברים יותר טוקנים בצד אחד, כך הוא נעשה יקר יותר. את הנזילות מביאים לפול ספקים שמקבלים חלק מעמלת המסחר.

מכאן התכונות השונות. הפול נסחר ברצף, בלי פער בין פקודות ובלי משמרת תורנית, אבל בנפח גדול ההחלקה גדלה, והספקים נושאים בסיכון להפסדים בלתי קבועים. הספר נותן מחיר מדויק ועומק צפוי, אבל דורש מרקט-מייקר שמחזיק את הספרד בכל שעות היממה.

פול בוחרים כשצריך רישום אוטומטי בלי הרשאות ומודרציה, זנב ארוך של זוגות ומינימום תמיכה תפעולית. מודל עם נזילות מרוכזת מעל אותה נוסחה מאפשר לצמצם את טווח המחירים ולהעלות את צפיפות ההון בזוגות פעילים — כלומר לתת יותר עומק היכן שבאמת מתבצעות עסקאות.

סכמות החלפה היברידיות סוגרות את הפער בין הגישות. המרקט-מייקר מצטט לפול משלו או לספר, והנתב מפצל הזמנה גדולה בין המקורות ומושך את המחיר הטוב ביותר.

פול לפי מחיר אורקל מפחית את סיכון ההפסדים הבלתי קבועים עבור הספקים, ופוזיציות לימיט מעל הפול נותנות אפקט של ספר בלי מרקט-מייקר חיצוני.

הקריטריון המעשי — פרופיל הנפח והנכונות להחזיק נזילות תורנית. לנכס חדש ולזוגות נישה הפול זול יותר בתחזוקה, ולזרימה צפופה של הזמנות גדולות הספר או ההיבריד מדויקים יותר במחיר.

בהתחלה אנחנו מחשבים את שתי האפשרויות על נתונים היסטוריים של הזוג ומראים היכן בדיוק נפרדים מחיר הביצוע והעומס על התחזוקה.

ספקות טכניים: ביקורת, נזילות, הגירה

ההסתייגויות ההנדסיות לגבי AMM DEX נוגעות לא לרעיון אלא לפרטים: מה בדיוק בודקת הביקורת, כיצד מתנהג הפול בזמן יציאת נזילות, מי מחזיק בפרמטרים ומה יקרה לפוזיציות בעת החלפת מודל.

ביקורת חוזים — פורמליות או בדיקה אמיתית?

בודקים לא רק את ליבת הפול, אלא גם את ניתוב ההחלפות, חישוב העמלות, הרשאות המנהל ותרחישי משיכת כספים. בנפרד מריצים בדיקות למניפולציות מחיר ולכניסה חוזרת. התוצאה — דוח עם רשימת ההערות שנסגרו, שממנו רואים מה תוקן ומה התקבל כסיכון מודע.

מה קורה לפול כשהנזילות נופלת?

המעגל נשאר פעיל, אבל המחיר נעשה רגיש יותר לעסקאות גדולות. לכן אנחנו מחשבים אותו לפי ממוצע על פני מרווח זמן, ולא לפי ערך רגעי, ומגבילים את חלקה של עסקה אחת בנפח הכולל. שפיכה חדה לא מזיזה את הציטוט על כל עומק הפול.

למי יש גישה לפרמטרים של הפרוטוקול?

פונקציות ניהול מוציאים לתפקידים נפרדים: השהיה, החלפת עמלה, עדכון חוזים. המפתחות לא נמצאים אצל אדם אחד, אלא מחולקים בין המשתתפים. גישה בודדת לא מאפשרת לא למשוך כספים ולא לשנות את תנאי ההחלפה.

כיצד מועברות פוזיציות בעת החלפת מודל הפול?

בהגירה מטפלים סקריפטים: קוראים יתרות, מחזירים טוקנים מהפול הישן ומכניסים אותם לחדש תוך שמירה על הפרופורציות. חלון המעבר נבחר לפי פעילות נמוכה, כדי שההחלקה במעבר תהיה מינימלית. המשתמש לא צריך לסגור ולפתוח פוזיציה ידנית.

מה כלול בתמיכה לאחר ההשקה?

עוקבים אחרי מצב הפול והדוחות, מעדכנים פרמטרים כשהעומס משתנה, מטפלים באירועים. תקנון התגובה ונקודות הבקרה נקבעים מראש, ולא אחרי התקלה הראשונה.

נדון במשימה: פירוק המכניקה ותוכנית העבודה

כדי שפירוק מכניקת ההחלפה יהיה ענייני ולא שחזור של תיאוריה, אנחנו צריכים נתוני פתיחה — איתם נמדל את התנהגות הפול לפני תחילת העבודה. אנחנו עובדים עם ארכיטקטורת AMM תואמת Uniswap V2 ו-V3, ולכן חשובים הפרטים: טיוטות, קטעי חוזים ושרטוטי ממשק אפשר לשלוח כמו שהם.

  • נכסים וזוגות: אילו טוקנים בפול, כמה פולים, האם נדרש ניתוב עסקה דרך כמה פולים.
  • מודל נזילות: אינווריאנט קלאסי עם מכפלה קבועה, נזילות מרוכזת לפי טווחי מחיר או היבריד.
  • עמלה: שיעור קבוע או מדרגות לפי זוגות, כיצד היא מתחלקת בין ספקי הנזילות לפרוטוקול.
  • מי סוחר: ארנקי משתמשים, אגרגטורים, אסטרטגיות אוטומטיות, ממשק משלכם.
  • ניהול: השהיית החלפות, החלפת עמלה, תקרות לגודל עסקה, ניהול רשימת הנכסים.
  • ביקורת חוזים: מי בודק, האם נדרשת פרסום הדוח, האם יש דרישות ענפיות.
  • סדר ההשקה: רשת בדיקה, השקה מוגבלת בנזילות קטנה, הכנסה מלאה.

על כל נתון פתיחה נחזור עם פירוק המכניקה: היכן האינווריאנט של הפול מתנהג לא סטנדרטי, באילו תרחישים ההחלקה אוכלת את הרווח של ספק הנזילות, ואילו בדיקות הכרחיות לפני הביקורת. משם — תוכנית עבודה לפי שלבים עם הערכת מאמץ וסדר שחרור.

הפירוק אורך שניים-שלושה ימי עבודה, ולאחריו יש בידיכם לוח זמנים עם גבולות השלבים, ולא רשימת שירותים כללית.