איך לכתוב את החוזה החכם הראשון שלך?



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

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

הנושאים הבאים מכוסים במדריך זה לפיתוח חוזים חכם:





בניית החוזה החכם שלך

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



מבנה החוזה החכם

חוזה חכם למוצקות, בעצם, הוא אוסף של הבאים

  • נתונים - השומר על המצב הנוכחי של החוזה
  • פוּנקצִיָה - אשר מיישמים את ההיגיון למעבר מצב החוזה

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



הוראת פרגמה

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

מוצקות פרגמה> = 0.4.0<=0.6.0 

הצהרת חוזה

החוזה מוכרז באמצעות מילת המפתח 'חוזה'. זה מצהיר על חוזה ריק שמזוהה בשם 'הזמנת רכש'.

הזמנת רכש הזמנה {}

אחסון נתונים רלוונטיים בחוזה

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

פיתוח חוזים חכם: הצגת משתנים

בסולידיות, המשתנים הם משני סוגים

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

הוספת נתונים לחכם החכם

בואו נוסיף משתנה נתונים לחוזה. על כל הזמנת רכש, חייבת להיות משויכת כמות כלשהי של מוצר. הבה נוסיף כמות_מוצר משתנה שתהיה מסוג נתונים שלם או מספר.

כיצד להגדיר PHP

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

  • U - לא חתום (כלומר סוג זה יכול לייצג מספרים שלמים חיוביים בלבד, ולא מספרים שלמים חיוביים ושליליים)
  • INT - מספר שלם
  • גודל 256 - 256 ביט
  • הערך המינימלי שניתן להקצות uint256 הוא 0
  • ניתן להקצות ערך מקסימלי ל- uint256 הוא 2 ^ 256-1 [מספר גדול מאוד]

כמות המוצר היא ערך חיובי בלבד וההנחה הנוכחית היא שאנחנו הולכים לתת ערך גדול מאוד לכמות המוצר.

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

הזמנת רכש הזמנה {uint256 product_quantity}

הגדרת הבנאי

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

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

מיזוג מיון מיון c ++

קונסטרוקטור () ציבורי {product_quantity = 100}

הוספת פונקציות

בואו כעת נוסיף פונקציה כדי להפוך את התוכנית שלנו לאינטראקטיבית. פונקציות הן יכולות מבוקרות שניתן להוסיף לתוכנית. לפני כל פונקציה קודמת פונקציית מילות המפתח. באופן כללי כך נראית הצהרת הפונקציה' פוּנקצִיָה ”.

קבל פונקציה

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

בואו נפרק כעת את פונקציית ה- get שלנו (get_quantity)

לא. מילת מפתח ערך
אחד get_quantity (){לא עוברים פרמטרים}
2 פּוּמְבֵּי{כל אחד יכול לגשת לפונקציה}
3 נוף{מסמל שהפונקציה קוראת רק את מצב החוזה, לא משנה את מצב החוזה, ומכאן התצוגה}
4 מחזיר משתנה מסוג uint256 {מוגדר מה מוחזר על ידי הפונקציה}
פונקציה get_quantity () מחזירה תצוגה ציבורית (uint256) {return product_quantity}

פונקציות סט

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

בואו נפרק כעת את פונקציית ההגדרה שלנו (update_quantity)

הוספת פונקציה לעדכון ערך כמות המוצר

לא. מילת מפתח ערך
אחד update_quantity (ערך uint256){פרמטר ערך מסוג uint256 מועבר}
2 פּוּמְבֵּי{כל אחד יכול לגשת לפונקציה}
3 לא נדרש מכיוון שהמדינה מתעדכנת על ידי הפונקציות
4 מחזיר משתנה מסוג uint256 (מוגדר מה מוחזר על ידי הפונקציה)
פונקציית update_quantity (ערך uint256) ציבורית {product_quantity = product_quantity + value}

אם מחברים את כל זה יחד, כך צריך להיראות החוזה הכולל.

מוצקות פרגמה> = 0.4.0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

פריסת החוזה החכם

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

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

Remix מספק גם את היכולת לבדוק במהירות את החוזה החכם.

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

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

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

Remix-UI-Smart-Contracts-Edureka

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

  1. לחיצה על סמל הפלוס, ניתן ליצור קובץ חדש ולתת שם לקובץ PurchaseOrder.sol
  2. פעולה זו תיצור קובץ ריק בשם PurchaseOrder.sol, לחץ ופתח קובץ זה.
  3. תן לנו להעתיק להדביק את כל החוזה ב- PurchaseOrder.sol.
  4. לחץ על הסמל השני, בתפריט השמאלי ממש מתחת לסמל הקובץ אמורה להופיע מהדר מהדק solidity.
  5. תחת תווית המהדר, בחר בגרסת המהדר. הגרסה הנוכחית שנבחרה היא 0.5.8.
  6. פרסם את בחירת גרסת המהדר, לחץ על 'הידור רכש הזמנה.סול'. זה ירכיב את החוזה החכם.

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

    • ABI - ממשק בינארי ליישומים. זהו קובץ json המפרט את כל השיטות שנחשפו בחוזה החכם יחד עם מטא נתונים של השיטות. עוד על כך נדון בבלוגים הבאים.
    • Bytecode- קוד פעולה של EVM (מכונה וירטואלית Ethereum), ההיגיון החוזי החכם הופך לקוד התאים בעת ההידור.

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

אפשרות פריסה

מסך הפריסה, מספק כמה אפשרויות, הבה נבחן אותן אחת אחת.

  • סביבה: ניתן לחשוב על אפשרות דומה לבחירת רכישת מחשב נייד מאמזון, Flipkart, Newegg (כל אלה הן קמעונאיות מקוונות) אתה בוחר מאיפה אתה רוצה לקנות, על פי הדרישה שלך. באופן דומה, במקרה של רמיקס, יש לנו אפשרות היכן לפרוס את החוזה החכם ולבדוק את החוזה החכם. התפריט הנפתח לצד תווית הסביבה מספק שלוש בחירות
    • VM של JavaScript - צומת יחיד Ethereum מקומי מסתובב בזיכרון הדפדפן ומספק 5 חשבונות בדיקה ממומנים מראש אשר יכולים לשמש לעסקה (פריסה, הפעלת פונקציות)
    • הזרקת Web3 לספק - זה מסתמך על MetaMask. Metamask הוא כמו מתווך או מתווך, המאפשר ליישומי האינטרנט ליצור אינטראקציה עם החוזה החכם. Metamask מספק יכולת לנהל את הזהויות וגם לחתום על העסקאות שיש לשלוח לרשת האת'רום.מחקר ופיתוחהמפלגה מספקת לך עזרה בקביעת רשת הבלוקצ'יין שאליה יפרוס החוזה החכם.
    • ספק Web3 - אם אתה מפעיל צומת מקומי של Ethereum ונקודת קצה RPC זמינה, ניתן להשתמש באפשרות זו. חוזה חכם ייפרס לצומת האתריום המקומי.
  • חשבונות: מידע זה מאוכלס על סמך הסביבה שנבחרה. לדוגמה. JavaScript VM מספק 5 חשבונות בדיקה ממומנים מראש. במקרה של ספק Web3 ו- Web3 המוזרק אינם מספקים חשבונות בדיקה ממומנים מראש.
  • מגבלת גז: זה מגדיר את כמות הגז המקסימלית שהיזם מוכן להוציא עבור כל עסקה. זה המקום להגן מפני לולאה אינסופית ודילול כל כספי החשבון במקרה של לולאה אינסופית.
  • ערך: הערך שעשוי להידרש לשלוח בזמן פריסת החוזה החכם. זהו ערך אופציונלי.

על מנת לפרוס את החוזה, בחר באפשרות JavaScript VM, בחר בחשבון הראשון מהחשבונות הנפתחים, שים לב ליתרת החשבון (100 אתר).

וודא ששם החוזה החכם המופיע הוא PurchaseOrder, לחץ על פריסה. פעולות מפתח שיקרה

  1. יתרת החשבון משתנה מ -100 אתר ל -99.999999 אתר, הסכום שנוכה הוא עלות העסקה לפריסת החוזה החכם.
  2. במסגרת חוזה פרוס יופיע אריח חדש לחוזה חכם, שיספק גם את כתובת החוזה החכם החדש בערך כזה (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. בחלון המסוף המידע הבא יופיע
    1. חשיש עסקה - מזהה באופן ייחודי את פריסת החוזה
    2. עלות עסקה
    3. כתובת החוזה

אינטראקציה עם החוזה הפרוס

  1. על פי החוזה הפרוס, שתי שיטות אינטראקציה זמינות עדכון_כמות וגט_כמות.
  2. שתי שיטות האינטראקציה הללו הן השיטות הציבוריות המוגדרות בחוזה 'הזמנת הרכש'.
  3. כמות עדכון 'שיטת update_quantity' דורשת פרמטר קלט, ומכאן תיבת הקלט.
  4. קבל כמות 'שיטת get_quantity' מאחזרת את ערך המוצר_כמות.
  5. בואו נבדוק מה קורה כשמופעלת get_quantity, מוצג ערך החזרה 100, שאותחל אצל הבנאי. זה לא גורם לקיום עסקה
  6. הבה נפעיל את update_quantity ונספק 30 כקלט. זה גורם לעסקה לקרות

בקצרה, כל פעולה הגורמת לפעולת כתיבה למצב החוזה (כלומר לשנות את משתני החוזה) תביא לעסקה.

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

סיכום פיתוח חוזים חכם

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

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

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

מה זה מפתח בלוקצ'יין

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

יש לך שאלה עבורנו? אנא הזכיר זאת בפרק ההערות של 'פיתוח חוזים חכם' ונחזור אליך לעבר האוזןרחוב.