עוד ספרייה חשובה ביותר, למפתחי בלוקציין, היא OpenZeppelin, נרצה מאד לאמץ אותה בפרויקט שלנו.
OpenZeppelin – חוזים סטנדרטים מאובטחים. הספרייה הזו תקל עלינו מאד מכוון שנוכל להאיץ את הכתיבה שלנו בשימוש חוזים סטנדרטיים, שOpenZeppelin תספק לנו, כמו כן כלים וחוזים מאובטחים ואמינים. כמפתח בלוק ציין מנוסה, אני יכול להגיד שאין לי פרויקט בלי OpenZeppelin ואף גדולי התחום משתמשים בספריה זו.
בשביל להתקין את הספרייה של OpenZeppelin יש לרשום את הפקודה הבאה:
npm install @openzeppelin/contracts
וזהו בגדול, עכשיו נתקדם קצת לפרויקט שלנו ואציג תוך כדי כמה יעיל השימוש עם openzeppelin עבורנו ובכלל.
אז התקדמתי מעט עם הפרויקט ועצרתי אחרי כמה צעדים על מנת להציג לכם את השימוש עם openzeppelin.
הפרויקט שלנו צריך מטבע ERC20 ולכן צריך לממש חוזה זה לפני הצרכים שלנו, שהם דיי בסיסיים ולכן יהיה מאד פשוט עם שימוש openzeppelin , תראו כמה קצר החוזה שלנו של הERC20 Token:
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; // Uncomment this line to use console.log import "../node_modules/hardhat/console.sol"; import "../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract WellToken is ERC20 { constructor(uint256 initialSupply) ERC20("WellToken", "WET") { _mint(msg.sender, initialSupply * 10 ** decimals()); } }
שימו לב לכמה דברים מעניינים:
- יצרתי חוזה בשם WellToken והוא יורש את ERC20 (מי שלא זוכר מה זה ירושות של חוזה חכם) מ openzeppelin ולמעשה אנחנו מקבלים את כל מה שצריך שיהיה בחוזה חכם מאובטח של מטבע מבוסס איתריום.
- אפשר לראות שזמינות לנו פונקציות מתוך החוזה ERC20 , למשל _mint וגם decimals. כמו כן תוכלו לגשת לקובץ בספריה של openzeppelin ולראות את כל הפונקציות שזמינות לרשותכם.
deploy לחוזה החכם
קצת פחות קשור לשיעור אבל אם כבר רשמנו חוזה חכם של המטבע שלנו, אז חשוב לשנות את הסקריפט שאיתו עושים את הdeploy . למה זה חשוב? כי נראה לבדוק שהכל עובד כמו שצריך, כלומר לבדוק לוקאלית את החוזה שלנו ולוודא שהכל תקין. אפשר גם לרשום טסטים כמובן, אבל טסטים זה דורש פוסט נפרד אז לא כרגע😘
const hre = require("hardhat"); async function main() { const initialSupply = 1000000; const wellToken = await hre.ethers.deployContract("WellToken", [initialSupply]); await wellToken.waitForDeployment(); const totalSupply = await wellToken.totalSupply(); console.log( `WellToken deployed to ${await wellToken.getAddress()} with an initialSupply ${totalSupply}` ); } // We recommend this pattern to be able to use async/await everywhere // and properly handle errors. main().catch((error) => { console.error(error); process.exitCode = 1; });
ברגע שנריץ את קובץ הJS בעזרת הפקודה: npx hardhat run scripts/deploy.js
החוזה שלנו יקומפל , כלומר החוזה של ERC20 של openzeppelin
אתם תקבלו משהו כזה:
WellToken deployed to 0x5FbDB2315678afecb367f032d93F642f64180aa3 with an initialSupply 1000000000000000000000000
יש חוזה ERC20, כלומר token חדש בשם WET' ויש מטבעות (סה"כ 1000000 מטבעות) שהונפקו לחוזה זה
בהמשך נעבוד עם סביבה לוקאלית של ganache , יהיה יותר נוח לראות את הרשומות בבלוקציין. אבל לצורך הפוסט הזה , נסתפק בזה.
לסיכום שיעור סולידיטי OpenZeppelin
OpenZeppelin מכיל המון כלים ופונקציות מוכנות שיעזרו לכם מאד בפיתוח שלכם ומומלץ ביותר ללמוד ולקרוא דוקומנטציות OpenZeppelin, גם אנחנו בהמשך נעשה שימושים נוספים, כל השימושים יהיו כמו השימוש שעשינו פה של ירושה מתוך ספריית החוזים של OpenZeppelin. בפוסט הבא נתקדם מעט בפרויקט, נדבר בעיקר על העלאה של חוזה לרשתות הטסט וכל מה שצריך לדעת על contracts deployment מתוך הIDE.