פרטי הקורס
פרק 1: מבוא למטבעות קריפטוגרפיים ובלוקצ'יין
0/1
פרק 2: תכנון המטבע הקריפטוגרפי שלך
0/1
פרק 3: הגדרת סביבת הפיתוח שלך
0/1
פרק 4: בניית ליבת הבלוקצ'יין
0/1
פרק 5: פיתוח חוזים חכמים
0/1
פרק 6: הקמת נוד מלא
0/1
פרק 7: בניית סייר בלוקים
0/1
פרק 8: פיתוח ארנק
0/1
פרק 9: ולידטורים וסטייקינג
0/1
פרק 10: הגדרת עמלות עסקה
0/1
פרק 11: אבטחה ונהלים מומלצים
0/1
פרק 12: השקת המטבע הקריפטוגרפי שלך
0/1
פרק 13: פיתוח מתמשך ושדרוגים
0/1
קורס: בניית מטבע קריפטוגרפי מבוסס PoS כמו את'ריום
פרטי השיעור

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

שלב 1: התקנת הכלים הדרושים
התקנת Truffle ו-Ganache
Truffle היא מסגרת עבודה לפיתוח חוזים חכמים ב-Solidity. Ganache היא רשת בלוקצ'יין מקומית לבדיקת חוזים חכמים.

התקן את Truffle:

התקן את Ganache:

npm install -g ganache-cli

יצירת פרויקט Truffle

  1. צור תיקייה חדשה עבור הפרויקט שלך:

mkdir my-smart-contract

cd my-smart-contract

אתחל פרויקט Truffle חדש:

 

שלב 2: כתיבת חוזה חכם ב-Solidity

יצירת חוזה חכם לאחסון ושליפת נתונים

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

  1. בתוך תיקיית הפרויקט, צור קובץ חדש בשם SimpleStorage.sol בתיקיית contracts:

// contracts/SimpleStorage.sol
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 storedData;

    function set(uint256 x) public {
        storedData = x;
    }

    function get() public view returns (uint256) {
        return storedData;
    }
}

שלב 3: פריסת החוזה החכם

עדכון קובץ ה-Migration

נעדכן את קובץ ה-Migration כדי לפרוס את החוזה.

  1. ערוך את קובץ 2_deploy_contracts.js בתיקיית migrations:

// migrations/2_deploy_contracts.js
const SimpleStorage = artifacts.require("SimpleStorage");

module.exports = function(deployer) {
  deployer.deploy(SimpleStorage);
};

הרצת Ganache והגדרת רשת מקומית

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

  1. הרץ את Ganache:

פריסת החוזה החכם על הרשת המקומית

  1. בפרויקט Truffle, נפרוס את החוזה החכם:

שלב 4: בדיקת החוזה החכם

כתיבת מבחנים לחוזה החכם

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

  1. צור קובץ חדש בשם testSimpleStorage.js בתיקיית test:

// test/testSimpleStorage.js
const SimpleStorage = artifacts.require("SimpleStorage");

contract('SimpleStorage', (accounts) => {
  it('should store the value 89.', async () => {
    const simpleStorageInstance = await SimpleStorage.deployed();

    // Set value of 89
    await simpleStorageInstance.set(89, { from: accounts[0] });

    // Get stored value
    const storedData = await simpleStorageInstance.get.call();

    assert.equal(storedData, 89, "The value 89 was not stored.");
  });
});

נריץ את המבחנים:

הסבר מפורט על הקוד

  1. כתיבת החוזה החכם (SimpleStorage.sol)

    • הקוד מתחיל בהגדרת גרסת הקומפיילר pragma solidity ^0.8.0;.
    • אנו יוצרים חוזה חכם בשם SimpleStorage שמכיל משתנה יחיד מסוג uint256 בשם storedData.
    • החוזה מכיל שתי פונקציות:
      • set(uint256 x): פונקציה שמקבלת מספר שלם ומעדכנת את המשתנה storedData.
      • get() public view returns (uint256): פונקציה שמחזירה את הערך הנוכחי של storedData.
  2. עדכון קובץ ה-Migration (2_deploy_contracts.js)

    • הקובץ טוען את החוזה החכם SimpleStorage באמצעות artifacts.require.
    • אנו מגדירים פונקציה שמפרסת את החוזה באמצעות deployer.deploy(SimpleStorage).
  3. הרצת Ganache והגדרת רשת מקומית

    • הרצת ganache-cli יוצרת רשת בלוקצ'יין מקומית שניתן לבדוק עליה את החוזים החכמים.
  4. פריסת החוזה החכם על הרשת המקומית

    • הרצת truffle migrate מפרסת את החוזה החכם על הרשת המקומית ומציגה את הכתובת שלו.
  5. כתיבת מבחנים לחוזה החכם (testSimpleStorage.js)

    • אנו טוענים את החוזה החכם SimpleStorage באמצעות artifacts.require.
    • במבחן should store the value 89, אנו מוודאים שהחוזה שומר את הערך 89 כראוי.
    • הפונקציה set מעדכנת את הערך של storedData.
    • הפונקציה get מחזירה את הערך המאוחסן ואנו מוודאים שהוא שווה ל-89.

שלב 5: שיטות עבודה מומלצות לפיתוח חוזים חכמים

תיעוד קוד

חשוב לתעד את הקוד שלך כדי להבטיח שהוא קריא ומובן לאחרים ולך בעתיד.

  1. דוגמה לתיעוד חוזה חכם ב-Solidity:

// contracts/SimpleStorage.sol
pragma solidity ^0.8.0;

/**
 * @title SimpleStorage
 * @dev Store & retrieve value in a variable
 */
contract SimpleStorage {
    uint256 private storedData;

    /**
     * @dev Store value in variable
     * @param x value to store
     */
    function set(uint256 x) public {
        storedData = x;
    }

    /**
     * @dev Return value
     * @return value of 'storedData'
     */
    function get() public view returns (uint256) {
        return storedData;
    }
}

בדיקות אוטומטיות ושילוב מתמשך (CI)

שימוש בכלים כמו GitHub Actions, Travis CI או Jenkins לבדיקות אוטומטיות ושילוב מתמשך יכול לשפר את איכות הקוד שלך.

  1. דוגמה להגדרת GitHub Actions לבדיקת חוזים חכמים:

# .github/workflows/truffle.yml
name: Truffle

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '12'
    - name: Install dependencies
      run: npm install
    - name: Start Ganache
      run: npm run ganache-cli &
    - name: Run tests
      run: truffle test

אבטחת החוזים החכמים

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

  1. שימוש בכלים לאבטחת חוזים חכמים כמו MythX, OpenZeppelin Defender.
  2. בדיקות חדירות (Penetration Tests) לבדיקת עמידות החוזים להתקפות.

סיכום

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

צפיות מבקרים: 18