פרטי השיעור
פרק 11: אבטחה ונהלים מומלצים
שלב 1: אבטחת הבלוקצ'יין שלך
פגיעויות והתקפות נפוצות
- 51% Attack: התקפה בה תוקף שולט ביותר מ-50% מכוח הכרייה ברשת.
- Sybil Attack: התקפה בה תוקף יוצר מספר זהויות מזויפות ברשת.
- Double Spend Attack: התקפה בה תוקף מוציא את אותם מטבעות יותר מפעם אחת.
יישום נהלי אבטחה מומלצים
- שימוש בחוזים חכמים מבוקרים: חוזים חכמים צריכים לעבור ביקורת (audit) על ידי צד שלישי.
- בדיקות חדירות ובדיקות אבטחה תקופתיות:
- השתמש בכלים כמו MythX, OpenZeppelin Defender לבדיקות אבטחה.
- דוגמה לשימוש ב-MythX לבדיקת חוזה חכם:
myth analyze contracts/SimpleStorage.sol
שלב 2: בדיקת חוזים חכמים
כלים וטכניקות לבדיקה
- Remix IDE: סביבה אינטרנטית לפיתוח ובדיקת חוזים חכמים.
- Truffle: מסגרת עבודה לפיתוח ובדיקת חוזים חכמים.
- OpenZeppelin Test Helpers: ספריית עזר לבדיקת חוזים חכמים.
דוגמה לבדיקת חוזה חכם ב-Truffle
-
התקנת ספריית 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"
);
});
});
הרצת המבחנים:
truffle test