Synthetix ספגה הפסד עצום לפני כמה שנים — לא בגלל פרצת קוד, אלא בגלל באג באורקל של Chainlink עבור הוון הקוריאני. בוט אחד קרא מחיר שגוי וביצע מספר גדול של עסקאות sETH/sKRW תוך דקות. הפרוטוקול ביטל את העסקאות באמצעות ממשל. הסיפור הזה מדגיש את הכאב המרכזי של נכסים סינתטיים: כל הפרוטוקול חי על דיוק נתוני המחיר, וכל כשל הוא קטלני. הצוות שלנו השלים מעל 12 פרויקטים בתחום זה, ואנחנו יודעים היכן למקם אמצעי הגנה. פיתוח פרוטוקול נכסים סינתטיים אינו רק כתיבת חוזים חכמים — זה בניית מערכת בת-קיימא כלכלית עם אפס סובלנות לשגיאות אורקל ופירוק נכסים. אם אתם מתכננים להשיק פרוטוקול משלכם, צרו קשר — נעזור לכם להימנע ממלכודות נפוצות.
תקרית האורקל של Synthetix
תקרית זו מדגישה את התלות הקריטית באורקלים. זו דוגמה קלאסית לאיך כשל אחד בהזנת מחיר יכול להסלים להפסדים של מיליונים.
מאגר חוב לעומת CDP: שתי גישות
שני מנגנונים שונים מהותית עומדים בבסיס רוב הפרוטוקולים הסינתטיים. בחירת המודל קובעת את הסיכונים, המורכבות ועלויות הגז.
מודל מאגר החוב (Synthetix v2/v3)
כל המחזיקים בפרוטוקול נושאים יחד את החוב כלפי מחזיקי הנכסים הסינתטיים. אם מחזיקי sAAPL מרוויחים, המחזיקים מפסידים — באופן יחסי לחלקם במאגר החוב הגלובלי. זה יוצר דינמיקה של סכום אפס בתוך הפרוטוקול ומתמטיקת רווח והפסד מורכבת עבור ספקי נזילות.
הבעיה העיקרית עם מאגר החוב: אם חלק מהנכסים הסינתטיים עולים משמעותית מהר יותר מאחרים, החוב של המחזיקים מתנפח בצורה א-סימטרית. Synthetix v2 טיפלה בכך באמצעות גידור חוב באמצעות מדדים סינתטיים ב-Curve. Synthetix v3 פיצלה את מאגרי הבטוחה לשווקים מבודדים — כעת הסיכון אינו מתפזר גלובלית על כל המחזיקים.
מודל CDP עם בטחונות עודפים (Mirror, Abracadabra)
כל נכס סינתטי מגובה בבטוחה בנכס אחר עם עודף. פרוטוקול Mirror הטביע mAAPL, mTSLA המגובים ב-UST עם יחס בטחונות של 150%+. לאחר קריסת UST, לא היה מה לגבות את ההחזר. זהו סיכון קיומי של כל CDP סינתטי: איכות הבטוחה קובעת את יציבות המערכת כולה.
| פרמטר | מאגר חוב (Synthetix) | CDP (Mirror/Abracadabra) |
|---|---|---|
| נזילות | תיאורטית אינסופית (הטבעה לפי דרישה) | מוגבלת על ידי הבטוחה |
| סיכון מחזיק | חוב מאגר משותף | מבודד (רק עמדה עצמית) |
| תלות באורקל | קריטית | קריטית |
| מורכבות ביקורת | גבוהה | בינונית |
| עלות גז להטבעה | נמוכה | בינונית |
סיכונים אינהרנטיים בפרוטוקולים סינתטיים
הסיכון העיקרי הוא התקפות אורקל, כמו במקרה של Synthetix. השני הוא פירוקי נכסים במהלך תנועות שוק חדות: הפרוטוקול חייב לטפל נכון במצבים שבהם מחיר הבטוחה יורד ב-40% בבלוק אחד. השלישי הוא התקפות כלכליות באמצעות מניפולציית מחירים ב-DEXים המשמשים כמקורות מחיר. עבור מודל ה-CDP, איכות הבטוחה קריטית: אם המטבע היציב המשמש כבטוחה מאבד את הצמדתו, כל המערכת קורסת. אנו גם מתחשבים בסיכונים ספציפיים לאופטימיזציית גז: חוזים לא מותאמים מובילים לעמלות גבוהות על הטבעה/שריפה, ומפחיתים את התחרותיות. בניסיוננו, חשפנו בממוצע 3 פרצות קריטיות לכל פרויקט במהלך ביקורת.
הגנות מפני התקפות אורקל
ארביטראז' השהיה
Synthetix v1 סבלה מ-frontrunning: סוחר היה רואה עדכון אורקל ב-mempool, שולח עסקה עם גז גבוה יותר, וסוחר במחיר הישן לפני שהעדכון עבר. זה נקרא ארביטראז' השהיה.
הפתרון ש-Synthetix יישמה — תמחור מחוץ לשרשרת עם סילוק על השרשרת: המחיר נחתם על ידי צומת מורשה בזמן העסקה, והחוזה מאמת את החתימה. החלקה היא אפס, וארביטראז' השהיה בלתי אפשרי. מנגנון דומה משמש את רשת Pyth דרך Wormhole.
function exchange(
bytes32 sourceCurrencyKey,
uint256 sourceAmount,
bytes32 destinationCurrencyKey,
bytes calldata priceUpdateData, // Signed price from Pyth
uint256 publishTime
) external {
// Verify price freshness
require(block.timestamp - publishTime <= MAX_PRICE_LATENCY, "Price too old");
// Update price on-chain atomically with trade
pyth.updatePriceFeeds{value: msg.value}(priceUpdateData);
// Execute exchange at verified price
_internalExchange(sourceCurrencyKey, sourceAmount, destinationCurrencyKey);
} נכסים סינתטיים של נכסי עולם אמיתי (RWA): פרטים
נכסים סינתטיים על מניות, סחורות ומטבעות נסחרים רק בשעות השוק. החוזה חייב לדעת מתי השוק סגור ולחסום מסחר בתקופות אלה — אחרת ארביטראז'רים ינצלו את הפער בין סגירה לפתיחה.
עבור נכסים סינתטיים של RWA, תכונות חובה:
- אורקל שעות שוק — בדיקה למסחר פעיל
- מפסק חשמל אם המחיר חורג ביותר מ-10% בין עדכונים
- מנגנון סילוק עבור נכסים סינתטיים שפגו תוקפם
גישת הפיתוח שלנו
מחסנית ורכיבים
חוזי ליבה (Solidity):
-
function exchange( bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, bytes calldata priceUpdateData, // Signed price from Pyth uint256 publishTime ) external { // Verify price freshness require(block.timestamp - publishTime <= MAX_PRICE_LATENCY, "Price too old"); // Update price on-chain atomically with trade pyth.updatePriceFeeds{value: msg.value}(priceUpdateData); // Execute exchange at verified price _internalExchange(sourceCurrencyKey, sourceAmount, destinationCurrencyKey); }— פריסת אסימוני ERC-20 סינתטיים חדשים -
SynthFactory— ניהול בטחונות, חישוב יחס C -
CollateralManager— לוגיקת החלפה, ניתוב עמלות -
ExchangeEngine— מעקב חוב גלובלי (למודל מאגר החוב) -
DebtLedger— צבירת Chainlink + Pyth עם גיבוי
פיתוח ב-Foundry עם בדיקות fork מול mainnet. חשוב במיוחד לבדוק תרחישים עם נתוני מחיר היסטוריים — לשחזר תנועות שוק אמיתיות באמצעות OracleAggregator ואורקלים מדומים. אנו שמים דגש רב על אופטימיזציית גז: כל opcode ניתן לאופטימיזציה, מה שמפחית עלויות משתמש ב-15–20%.
פורמליזציה של אינווריאנטים עבור Certora:
- סכום כל הנכסים הסינתטיים בשווי דולר ≤ סכום הבטוחות × יחס C מקסימלי
- לאחר פירוק, יחס ה-C של העמדה הוא תמיד ≥ יחס ה-C היעד
תת-גרף של The Graph לאינדוקס אירועי הטבעה/שריפה, עמדות, חובות היסטוריים — בלעדיו, החזית הייתה קוראת מצב דרך קריאות on-chain איטיות.
מנגנון הפירוק בפירוט
עבור מודל ה-CDP: אם יחס ה-C יורד מתחת לסף המינימלי, העמדה הופכת פתוחה למפרקים. המפרק שורף את הנכס הסינתטי, ומקבל את הבטוחה בהנחה (בדרך כלל 10–15%).
נקודה קריטית היא דגל הפירוק: לא ניתן לפרק עמדה אטומית אם זה יוצר וקטור להלוואת פלאש. סכמה: המפרק חייב להחזיק בנכס הסינתטי כדי לפרק. הלוואות פלאש מאפשרות ללוות את הנכס הסינתטי, לפרק את העמדה, לקבל את הבטוחה ולהחזיר את ההלוואה — אם הפרוטוקול אינו מוגן.
הגנה: הגבלת אותו בלוק — איסור פירוק אם הנכס הסינתטי נרכש באותו בלוק (בדומה להגנת אינפלציית מניות ב-ERC-4626).
דוגמה לתרחיש פירוק
עמדה עם יחס C של 120% יורדת ל-105% עקב קפיצת מחיר. מפרק שכבר מחזיק בנכס הסינתטי שורף אותו ולוקח את הבטוחה בהנחה של 12%. לאחר הפירוק, יחס ה-C של העמדה משוחזר ל-150%.למה אימות פורמלי חשוב
עבור פרוטוקולים סינתטיים, אינווריאנטים מתמטיים הם קריטיים: סך החוב אינו יכול לעלות על הבטוחה, פירוקים חייבים להתבצע נכון בכל תנאי שוק. אנו משתמשים ב-Certora Prover כדי לבדוק תכונות אלה, ומספקים ערבויות שאינן ניתנות להשגה בבדיקות סטנדרטיות.
| שיטת אימות | רמת ערבוב | זמן ביצוע |
|---|---|---|
| בדיקות יחידה | נמוכה | 1–2 ימים |
| בדיקות fork עם נתונים היסטוריים | בינונית | 2–3 ימים |
| אימות פורמלי (Certora) | גבוהה | 1–2 שבועות |
מה כלול בפיתוח
- מסמך ארכיטקטורה עם נימוק לבחירת המודל (מאגר חוב / CDP)
- חוזים חכמים ב-Solidity (Foundry), מכוסים בבדיקות יחידה, אינטגרציה ו-fork
- אינטגרציית אורקל (Chainlink + Pyth), הגדרת מפסק חשמל
- פריסה ל-testnet ו-mainnet, תיעוד חוזים מלא
- תמיכה לאחר השקה: ניטור דרך Tenderly, התראות על חריגות
תהליך העבודה
- אנליטיקה (5–7 ימים). בחירת מודל (מאגר חוב לעומת CDP), רשימת נכסים, מקורות אורקל, פרמטרי יחס C, מבנה עמלות. מודלים כלכליים באמצעות סימולציות Python: מה קורה ב-40%- של נכס הבטוחה הראשי.
- עיצוב (שבוע). ארכיטקטורת חוזים, פריסת אחסון, אינטגרציות אורקל. בנפרד: מנגנון ממשל להוספת נכסים סינתטיים חדשים ושינוי פרמטרים.
- פיתוח (6–10 שבועות). פרוטוקול ליבה + אסימוני ERC-20 סינתטיים + פירוקים + מצרף אורקלים. בדיקות: יחידה, אינטגרציה, fork, בדיקות אינווריאנטים ב-Echidna.
- אבטחה (2–3 שבועות). ביקורת פנימית (Slither, Mythril, סקירה ידנית), ולאחר מכן ביקורת חיצונית. עבור פרוטוקולים סינתטיים — חובה, לפחות צוות חיצוני אחד.
- פריסה וניטור. התראות Tenderly על תנועות חריגות ביחס C, נפחים, סטיות מחיר.
הערכות זמנים ועלות
פרוטוקול CDP בסיסי עבור נכס סינתטי אחד לוקח 6–8 שבועות. פלטפורמה מלאה עם נכסים מרובים, מאגר חוב, ממשל ומספר סוגי בטחונות לוקחת 3–5 חודשים. ביקורת מקבילה מוסיפה 4–8 שבועות. עלות הפיתוח מתחילה מ-$50,000 עבור פרוטוקול CDP בסיסי, ומשתנה בהתאם למורכבות. קבלו ייעוץ להערכה ראשונית.







