פרטי הקורס
פרק 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 כמו את'ריום
פרטי השיעור

פרק 11: אבטחה ונהלים מומלצים

שלב 1: אבטחת הבלוקצ'יין שלך

פגיעויות והתקפות נפוצות

  • 51% Attack: התקפה בה תוקף שולט ביותר מ-50% מכוח הכרייה ברשת.
  • Sybil Attack: התקפה בה תוקף יוצר מספר זהויות מזויפות ברשת.
  • Double Spend Attack: התקפה בה תוקף מוציא את אותם מטבעות יותר מפעם אחת.

יישום נהלי אבטחה מומלצים

  1. שימוש בחוזים חכמים מבוקרים: חוזים חכמים צריכים לעבור ביקורת (audit) על ידי צד שלישי.
  2. בדיקות חדירות ובדיקות אבטחה תקופתיות:
    • השתמש בכלים כמו MythX, OpenZeppelin Defender לבדיקות אבטחה.
    • דוגמה לשימוש ב-MythX לבדיקת חוזה חכם:

myth analyze contracts/SimpleStorage.sol

 

שלב 2: בדיקת חוזים חכמים

כלים וטכניקות לבדיקה

  1. Remix IDE: סביבה אינטרנטית לפיתוח ובדיקת חוזים חכמים.
  2. Truffle: מסגרת עבודה לפיתוח ובדיקת חוזים חכמים.
  3. OpenZeppelin Test Helpers: ספריית עזר לבדיקת חוזים חכמים.

דוגמה לבדיקת חוזה חכם ב-Truffle

  1. התקנת ספריית OpenZeppelin Test Helpers:

npm install @openzeppelin/test-helpers

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

// test/testSimpleStorage.js
const { expectRevert } = require('@openzeppelin/test-helpers');
const SimpleStorage = artifacts.require("SimpleStorage");

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

    await simpleStorageInstance.set(89, { from: accounts[0] });
    const storedData = await simpleStorageInstance.get.call();

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

  it('should fail to store value if not owner.', async () => {
    const simpleStorageInstance = await SimpleStorage.deployed();

    await expectRevert(
      simpleStorageInstance.set(89, { from: accounts[1] }),
      "Ownable: caller is not the owner"
    );
  });
});

הרצת המבחנים:

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