8 טריקים קלים לאופטימיזציה של גז למוצקות

כדי ליצור אינטראקציה עם בלוקצ'יין EVM (Ethereum Virtual Machine), תמיד תצטרך לשלם דמי דלק. עמלות אלו עלולות להיות מתסכלות מכיוון שהן יכולות להיות גבוהות מאוד. בואו נסתכל מה בדיוק הם וכיצד נוכל לייעל את קוד החוזה החכם שלנו כדי להפחית את עמלות הגז.

מהו גז באת'ריום?

ב תיעוד Ethereumגז מוגדר כדלקמן:

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

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

עמלות גז=יחידות גז*מחיר גז

יחידות גז הם העלות הכוללת של פעולות חישוביות הנמדדות ביחידה הנקראת גז.
מחיר דלק הוא מחיר הדלק ב gwei (10-9 אתר). מחיר הגז משתנה בהתאם לניצול רשת Ethereum.

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

כיצד לייעל את עמלות הגז

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

הנה כמה טיפים להתחיל לייעל את הגז שלך.

טיפ מס' 1: אל תאתחל משתנים

אם המשתנה אינו מאותחל, ההנחה היא שיש לו ערך ברירת מחדל (0, false, 0x0, …). אתחול משתנים הוא אז רק א בזבוז של גז.

טיפ מס' 2: השתמש במשתנים מקומיים במקום במשתני מצב בתוך לולאות

קריאה וכתיבה מקומי משתנים הוא זול, ואילו קריאה וכתיבה היו משתנים המאוחסנים באחסון חוזה הם יקר.

טיפ מס' 3: השתמש חיצוני ופנימי במקום ציבורי

external פירושו שאתה יכול להתקשר לפונקציה שלך מחוץ לחוזה שלך.
internal פירושו שאתה יכול להתקשר לפונקציה שלך מתוך החוזה שלך.
public הוא שילוב של external ו internal, אתה יכול לעשות את שניהם.
As external ו internal מעניק פחות גישה מאשר public, הם זול יותר.
אז תמיד לְהַעֲדִיף כדי להשתמש external or internal קודם ותשנה אותו ציבורי במידת צורך.

טיפ מס' 4: אחסן נתונים בזיכרון, לא באחסון

בחירת מיקום הנתונים המושלם היא חיונית. אתה חייב לדעת את אלה: 

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

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

טיפ מס' 5: סדר את המשתנים שלך

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

טיפ מס' 6: מחק את המשתנים שלך כדי לקבל החזר דלק

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

פשוט השתמש במילת המפתח delete.

טיפ מס' 7: השתמש מקונן if או מרובה לדרוש במקום && מפעיל

ראשון עבור ראות, אז בגלל שזה כן זול יותר!

טיפ מס' 8: השתמש בכלי האופטימיזציה של Solidity

ודא האופטימיזר של Solidity is מופעל. זה מפחית את עלויות הגז. מספר ברירת המחדל הוא 200. 

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

נכתב על ידי
אביגדור ששון כהן

אביגדור הוא חוקר אבטחה web3 ב-Sayfer. הוא נלהב מטכנולוגיות בלוקצ'יין חדשות וכיצד נוכל לוודא שאנו מפתחים אותן בצורה מאובטחת.

 

עבור לתוכן