קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
ראשי ♦ בלוקציין ♦ קורס סולידיטי – חלק שני – ירושות ו override

קורס סולידיטי – חלק שני – ירושות ו override

וינר יאיר 22 באפריל 2023 אין תגובות

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

ירושות בין חוזים אישיים

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

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.9;

contract contractOne {
    function one() public pure returns (uint) {
        return 1;
    }
}

contract contractTwo is contractOne {
    function two() public pure returns (uint) {
        return 2;
    }
}

אפשר לראות שבשביל לרשת מחוזה מסוים כל שעלינו לעשות זה להשתמש במילה IS בכדי לחבר בין שתי שמות החוזים. כך למעשה חוזה מספר 2 יורש את התוכן של חוזה מספר 1, במידה ותעשו deploy לחוזה contractTwo תראו שגם תקבלו את הפונקציה one ותוכלו לעשות בה שימוש כך שלמעשה חוזה זה ירש מחוזה האחר.

override

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

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.9;

contract contractOne {
    function one() public virtual pure returns (uint) {
        return 0;
    }
}

contract contractTwo is contractOne {

      function one() public pure override returns (uint) {
        return 1;
    }

    function two() public pure returns (uint) {
        return 2;
    }
}

בשביל לקבל בירושה וגם לשנות את הפונקציות יהיה עליכם להגדיר כמה הגדרות חדשות, יש להגדיר אילו מבין הפונקציות יועברו ביורשה ויהיו זמינות לשינוי, בעזרת הוספת הגדרה נוספת שהיא virtual. פונקציה שלא תקבל את ההגדרה virtual לא תהיה ברת שינוי בחוזה המקבל בירושה. כמו כן יש להגדיר בחוזה המקבל בירושה את ההגדרה override המתאימה לשם הפונקציה שקיבלה את ההגדרה של virtual. למשל כפי שניתן לראות בדוגמה, חוזה הראשון, פונקציית one בעלת ההגדרה virtual ובחוזה השני יש פונקציה באותה שם (one) עם ההגדרה override וכן למעשה בהרצת פונקציית one של חוזה 2 תקבלו בתשובה 1 ולא 0 כפי שהוגדר בפונקציה הראשונה.

המשך בפרויקט שלנו עם override וירושות

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

נייצר קובץ נוסף , חוזה נוסף ונקרא לו OnlyOwner.sol

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.9;

import "./OnlyOwner.sol";

contract FundMe is OnlyOwner {

    mapping(address => uint256) public funders;
    // address public owner;

    // constructor() {
    //    owner = msg.sender;
    // }
    
    function fund() public payable {
        funders[msg.sender] += msg.value; 
        // require(msg.value >= 1e18, "the minimum to fund is 1 eth");
    }

    function withdraw() public {
        // require(msg.sender == owner, "you are not the owner");
        checkOwner();
        payable(msg.sender).transfer(address(this).balance);
    }
}
// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.9;


contract OnlyOwner {

    address public owner;

    constructor() {
       owner = msg.sender;
    }
    
    function checkOwner() internal view {
        require(owner == msg.sender, "not an owner");
    }
}

לא רציתי למחוק מהחוזה הקודם כלום רק שמתי ב comment כל מיני שורות לא לרלוונטיות . ואז יצרתי חוזה חדש שיכיל בתוכו כל מיני דברים שקשורים רק לבעלים של החוזה, והעברתי את הבדיקה של checkOwner לפונקציה, והשתמשתי בה בחוזה המקורי. שימו לב שבחוזה המקורי עשיתי import לחוזה על מנת לרשת אותו. וזהו אז השתמשתי בפונקציה הזו בחוזה שלנו והכל מנגן כמו צריך. חשוב לציין שניתן לרשת מחוזים רבים באמצעות פסיקים A is B,C. אפשר גם לרשת חוזה שירש חוזה ולייצר שרשרת של יורשות בין חוזים.

לסיכום קורס סולידיטי – חלק שני – ירושות ו override

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

פוסטים קשורים:

קורס בלוקציין סולידיטי כתיבת חוזה חכםקורס סולידיטי – חלק שני – כתיבת חוזה חכם solidiitiy couse-codcodile Payableקורס סולידיטי – חלק ראשון -Payable functions remix-קורס-סולידיטיקורס סולידיטי – חלק ראשון – memory, calldata and storage remix-קורס-סולידיטיקורס סולידיטי – חלק ראשון – constant, immutable
blockchain בלוקציין מפתח בלוק מפתח בלוקציין מתכנת בלוקציין סולידיטי קורס בלוקציין קורס בלוקציין בחינם קורס סולידיטי

אודות המחבר

יאיר וינר להציג את כל הפוסטים של וינר יאיר


« פוסט קודם
פוסט הבא »

השארת תגובה

ביטול

חיפוש באתר
בחירת העורכים
29 בדצמבר 2023 עידן יצחקי

שדה טקסט עשיר עם תמונות

אתם הולכים להיות מופתעים עד כמה HTML יכול להיות חכם ולבצע משהו כל כך מורכב, שאם אנחנו היינו רוצים ליצור

1 באוקטובר 2021 עידן יצחקי

איך למשוך דינמית favicon של אתרים אחרים ב-JS

בפוסט זה נראה איך אפשר על פי לינקים בדף למשוך את ה-favicon מהדומיין שלהם באופן דינמי, בדיקה של תקינות התמונה

פופולרי
Javascript functions – היכרות עם סוגי פונקציות
Javascript
21 בדצמבר 2024 אין תגובות
Nested routing in angular standalone component
Typescript
15 בנובמבר 2024 תגובה אחת
בחרו לפי תגיות
angular blockchain css ethers express front-end fullstack GQL html javascript next js nextjs nodejs react hooks reactjs solidity webgl אנגולר בלוקציין וורדפרס לימודי אנגולר לימודי וורדפרס לימוד ריאקט מדריך front-end מדריך GQL מדריך אנגולר מדריך וורדפרס מדריך חינם react מדריך ריאקט מפתח בלוק מפתח בלוקציין מתכנת front-end מתכנת בלוקציין מתכנת פרונט סולידיטי קורס front end קורס fullstack קורס nextjs קורס אנגולר קורס בלוקציין קורס בלוקציין בחינם קורס סולידיטי קורס ריאקט קורס תכנות קורס תכנות בחינם
סינון על פי קטגוריות
CSS fullstack HTML IIS Javascript nodeJs SEO Typescript אנגולר בלוקציין בניית אתרים וורדפרס חיפוש עבודה כלים נוספים כללי נגישות קורסים ריאקט תלת מימד תקלות ופתרונות
צור קשר
כל הזכויות שמורות לקודקודייל
ליצירת קשר: @ קודקודייל
גלילה לראש העמוד