אובדן דיוק וניצול עיגול

חוזים חכמים אינם זקוקים לבאג בבקרת גישה כדי לאבד כסף.

לעיתים הניצול חבוי בחילוק פשוט.

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

בפרוטוקול פיננסי, עיגול הוא מדיניות להעברת ערך.

כל פעולת חילוק חייבת לענות על שלוש שאלות:

  • לאיזה כיוון מתבצע העיגול בחישוב?
  • איזה צד מרוויח מכיוון זה?
  • האם תוקף יכול לחזור על היתרון הזה או להגדיל אותו?

שגיאות מתמטיות נפוצות כוללות:

  1. חילוק מוקדם מדי אם מחלקים לפני שמכפילים, מאבדים דיוק. דוגמה: (amount / 1e18) * rate. פעולת החילוק הביניים זורקת נתונים לפני שהכפל מתבצע. כלל: תמיד תכפילו לפני שתחלקו.

  2. גלישת מספרים (overflow) בחישוב ביניים הכפלה ראשונית עלולה לגרום ל-overflow גם אם התוצאה הסופית נכנסת ב-uint256. השתמשו בספרייה כמו OpenZeppelin Math כדי לבצע כפל וחילוק בדיוק מלא בשלב אחד.

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

  • לעגל חוב כלפי מעלה.
  • לעגל תשלומים נדרשים כלפי מעלה.
  • לעגל ערך בטוחות (collateral) כלפי מטה.
  • לעגל נכסים המשולמים למשתמשים כלפי מטה.
  • לעגל מניות (shares) שנגבות ממשתמשים כלפי מעלה.

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

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

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

הנדסה פיננסית מאובטחת דורשת:

  • יחידות מפורשות וסדרי גודל עשרוניים.
  • כפל וחילוק בדיוק מלא.
  • עיגול ספציפי לפעולה.
  • מעקב אחר שארית.
  • בדיקות אינווריאנט (invariant) ובדיקות fuzzing.

אל תשאלו רק אם חישוב הוא "קרוב מספיק". שאלו לאן הולך הערך שנזרק ומי מקבל אותו.

מקור: https://dev.to/stablenaira/precision-loss-and-rounding-exploits-in-financial-smart-contracts-4c93