תכנות בלוקצ’יין: מוצקות. תכנות החוזים החכמים

במשך למעלה מעשר שנים של התפתחותה, Blockchain התרחבה באופן משמעותי ממערכת פשוטה של ​​העברת ערך באמצעות מטבעות לבסיס ליישומי Web 3.0 וביצועים מבוזרים. זה קרה בעיקר בגלל פרוץ פרויקטים חדשים לאחר שאת’רום הציגה את תקני ERC20 והחוזים החכמים שלה.

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

אם אתה רוצה לעשות את זה בהנדסת בלוקצ’יין, תצטרך לדעת איך עובדים חוזים חכמים ואיך לבנות אותם. למרבה המזל, Ethereum מספק את כל הדרוש לה, כולל שפת התכנות שלה – סולידיות. שפה זו נוצרה במיוחד לעבודה עם Ethereum Virtual Machine. זה די קל להבין, אבל יש כמה תכונות ייחודיות שתצטרך לזכור. היום נצלול עמוק לתוך עולם החוזים החכמים ונקודד חלק מהם. בואו נזוז!

איך Ethereum עובד?

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

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

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

איך עובד חוזה חכם?

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

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

בדיוק כמו יישום מרכזי, לחוזה חכם יש מקום ייעודי לאחסון המשאבים שלו ומציין מיקום לקוד (תארו אותו כדף אינטרנט שהורדתם מהאינטרנט, יהיה לו קובץ a.html וכמה תיקיות עם תמונות ואחרות דברים). יש גם אינדיקציה כמה ETH יש לחוזה על היתרה שלו; הדבר חיוני למקרי שימוש שונים כמו גיוס כספים, צוואות וכו ‘. הסכמה המלאה מוצגת בתמונה למטה.

Ethereum EVM & amp; סכמטי ארנקתמונה של יו. היום

איך בונים חוזה חכם?

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

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

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

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

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

דגם רכב & amp; חוזה חכם של כוח סוסתמונה של יו. היום

איך לעשות אסימון על Ethereum?

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

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

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

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

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

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

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

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

אסימון UTD ERC20תמונה של יו. היום

איך משיקים חוזה חכם?

כעת אתה יודע לקודד חוזים חכמים פשוטים ב- Solidity. בואו ננסה להבין כיצד ניתן להשיק אותם ברשת את’ריום. ראשית, עלינו לאסוף את הקוד. למטרה זו, באפשרותך להשתמש בקומפיילר המשולב של Remix או לעשות זאת במחשב שלך בעזרת Truffle framework. בוא נלך תחילה בדרך הקלה.

לפני שנתחיל יש ליצור חשבון Ethereum אם לא עשית זאת עד כה. לשם כך אנו ממליצים להשתמש בתוסף Metamask הניתן להתקנה על גבי דפדפני Chrome, Opera, Firefox ו- Brave. לאחר שתיצור ארנק, וודא שאתה שומר את ביטוי הזרע מכיוון שזו תהיה הדרך היחידה לגשת לארנק ממכונות אחרות או במקרה שתצטרך להתקין מחדש את התוסף. היתרון של Metamask הוא שאתה יכול לעבור בין רשתות שונות. זה יהיה שימושי כאשר אנו הולכים להשתמש ברשת בדיקות לצורך הניסויים שלנו. פתח את התוסף ובחר ברשת רופסטן. ואז, גש לברז ובקש קצת ETH, זכור שכל פעולה עם ה- EVM עולה Wei.

פתח את remix.ethereum.org. תראה קוד לקלפי – סגור באמצעותו את הלשונית. ל- Remix יש דפדפן ייעודי עבור קבצי.sol ומהדר משולב. בחלק העליון של הדפדפן יש סמל צולב המאפשר ליצור קבצים חדשים. בואו ניצור קובץ ונעתיק את החוזה החכם הראשון שלנו עם רכבים וכוחות הסוס שלהם. בחלק הימני של המסך תראה את המהדר עם כמה לשוניות. בכרטיסיה הראשונה בחר גרסת מהדר המתאימה לגירסת ה- Solidity שציינת והתחל תהליך אוסף. אם אין שגיאות, תוצג בפניך הודעת ‘הצלחה’. בחר בכרטיסייה השנייה ותראה קטע שבו עליך לציין סביבה מתאימה (במקרה שלנו Web3) ולבדוק שכתובתך נכונה (היא צריכה לרדת מ- Metamask). אם הכל תקין, לחץ על ‘פרוס’ ותקבל חלון קופץ מ- Metamask עם עסקה. אשר זאת וואלה, החוזה החכם שלך נפרס לרשת.

עכשיו למשהו מעניין יותר. אם השתמשת בעורך טקסט במחשב שלך כדי לכתוב את הקוד, תוכל לפרוס אותו באופן מקומי באמצעות Node.js. ראשית, הורד אותו מהאתר הרשמי או התקן באמצעות שורת פקודה (Windows) או טרמינל (OSX). במקרה שלנו נשתמש ב- OSX, אך התהליך דומה.

התקנת Node.js.תמונה של יו. היום

שנית, התקן את מסגרת ה- Solidity באמצעות ‘התקנת npm’.

התקנת טראפלתמונה של יו. היום

שלישית, הכינו תיקייה חדשה וצרו רפו באמצעות הפקודה ‘init’.

יצירת ריפו כמהיןתמונה של יו. היום

רביעית, התקן את HDWalletProvider לתוך ריפו זה גם דרך Node.js.

התקנת HDWalletProviderתמונה של יו. היום

חמישית, העתק קבצים עם ממשק ERC20 וחוזה האסימון שלך לתיקיית ‘החוזים’ ברשותך. שישית, צור את קובץ ה- JavaScript הבא בתיקיית ‘Migrations’ שלך בתוך ה- repo.

קובץ פריסת JSתמונה של יו. היום

שביעית, עליך לשנות את קובץ התצורה של הטראפל. עם זאת, יש צורך בצעד נוסף אחד לפני ביצוע פעולה זו. תזין את ה- mnemonic של הארנק שלך (ששמרת קודם) ו- API עבור Ropsten testnet. כדי להשיג את האחרון, עבור אל Infura ורשום פרויקט. בדף הפרויקט תראה את תעודת הזהות שלו. השתמש בו כ- API.

תצורת כמהיןתמונה של יו. היום

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

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

מה אתה יכול לעשות עם חוזה חכם?

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

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

אימות קודתמונה של יו. היום

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

חוזה חכם עובדתמונה של יו. היום

סיכום

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

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

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