Бібліотеки смарт-контрактів
Вам не потрібно писати кожен смарт-контракт у вашому проєкті з нуля. Існує багато доступних бібліотек смарт-контрактів з відкритим вихідним кодом, які надають будівельні блоки багаторазового використання для вашого проєкту, що позбавить вас від необхідності винаходити велосипед.
Передумови
Перш ніж переходити до бібліотек смарт-контрактів, варто добре зрозуміти структуру смарт-контракту. Перейдіть до розділу анатомія смарт-контракту, якщо ви цього ще не зробили.
Що міститься в бібліотеці
Зазвичай у бібліотеках смарт-контрактів можна знайти два види будівельних блоків: поведінку багаторазового використання, яку можна додати до ваших контрактів, та реалізації різних стандартів.
Поведінка
Під час написання смарт-контрактів є велика ймовірність, що ви будете писати схожі шаблони знову і знову, наприклад, призначати адміністративну адресу для виконання захищених операцій у контракті або додавати кнопку екстреної паузи на випадок непередбаченої проблеми.
Бібліотеки смарт-контрактів зазвичай надають реалізації такої поведінки для багаторазового використання у вигляді бібліотек (opens in a new tab) або через успадкування (opens in a new tab) в Solidity.
Як приклад, нижче наведено спрощену версію контракту Ownable (opens in a new tab) з бібліотеки контрактів ОупенЗеппелін (opens in a new tab), який призначає адресу власником контракту та надає модифікатор для обмеження доступу до методу лише для цього власника.
contract Ownable {
address public owner;
constructor() internal {
owner = msg.sender;
}
modifier onlyOwner() {
require(owner == msg.sender, "Ownable: caller is not the owner");
_;
}
}
Щоб використовувати такий будівельний блок у своєму контракті, вам потрібно спочатку імпортувати його, а потім розширити від нього власні контракти. Це дозволить вам використовувати модифікатор, наданий базовим контрактом Ownable, для захисту ваших власних функцій.
import ".../Ownable.sol"; // Шлях до імпортованої бібліотеки
contract MyContract is Ownable {
// Наступна функція може бути викликана лише власником
function secured() onlyOwner public {
msg.sender.transfer(1 ether);
}
}
Іншим популярним прикладом є SafeMath (opens in a new tab) або DsMath (opens in a new tab). Це бібліотеки (на відміну від базових контрактів), які надають арифметичні функції з перевірками на переповнення, що не передбачені самою мовою. Використання будь-якої з цих бібліотек замість нативних арифметичних операцій є хорошою практикою для захисту вашого контракту від переповнення, яке може мати катастрофічні наслідки!
Стандарти
Для полегшення компонованості та інтероперабельності спільнота Етеріуму визначила кілька стандартів у формі ERC. Ви можете дізнатися більше про них у розділі стандартів.
Включаючи ERC як частину ваших контрактів, варто шукати стандартні реалізації, а не намагатися створити власні. Багато бібліотек смарт-контрактів містять реалізації найпопулярніших ERC. Наприклад, повсюдний стандарт взаємозамінного токена ERC-20 можна знайти в HQ20 (opens in a new tab), DappSys (opens in a new tab) та ОупенЗеппелін (opens in a new tab). Крім того, деякі ERC також надають канонічні реалізації як частину самого ERC.
Варто зазначити, що деякі ERC не є самостійними, а є доповненнями до інших ERC. Наприклад, ERC-2612 (opens in a new tab) додає розширення до ERC-20 для покращення його зручності використання.
Як додати бібліотеку
Завжди звертайтеся до документації бібліотеки, яку ви підключаєте, щоб отримати конкретні інструкції щодо її додавання у ваш проєкт. Деякі бібліотеки контрактів Solidity запаковані за допомогою npm, тому ви можете просто використати npm install для них. Більшість інструментів для компіляції контрактів шукатимуть бібліотеки смарт-контрактів у вашій теці node_modules, тому ви можете зробити наступне:
// Це завантажить бібліотеку @openzeppelin/contracts з ваших node_modules
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyNFT is ERC721 {
constructor() ERC721("MyNFT", "MNFT") public { }
}
Незалежно від методу, який ви використовуєте, під час підключення бібліотеки завжди звертайте увагу на версію мови. Наприклад, ви не можете використовувати бібліотеку для Solidity 0.6, якщо ви пишете свої контракти на Solidity 0.5.
Коли використовувати
Використання бібліотеки смарт-контрактів для вашого проєкту має кілька переваг. Перш за все, це економить ваш час, надаючи готові до використання будівельні блоки, які ви можете включити у свою систему, замість того, щоб писати їх самостійно.
Безпека також є великим плюсом. Бібліотеки смарт-контрактів з відкритим вихідним кодом часто піддаються ретельній перевірці. Оскільки від них залежить багато проєктів, спільнота має сильний стимул постійно їх перевіряти. Набагато частіше можна знайти помилки в коді застосунку, ніж у бібліотеках контрактів багаторазового використання. Деякі бібліотеки також проходять зовнішні аудити (opens in a new tab) для додаткової безпеки.
Однак використання бібліотек смарт-контрактів несе в собі ризик включення у ваш проєкт коду, з яким ви не знайомі. Спокусливо імпортувати контракт і включити його безпосередньо у свій проєкт, але без хорошого розуміння того, що робить цей контракт, ви можете ненавмисно створити проблему у своїй системі через непередбачувану поведінку. Завжди читайте документацію коду, який ви імпортуєте, а потім переглядайте сам код, перш ніж зробити його частиною вашого проєкту!
Нарешті, приймаючи рішення про те, чи варто підключати бібліотеку, враховуйте її загальне використання. Широко розповсюджена бібліотека має переваги у вигляді більшої спільноти та більшої кількості очей, які шукають у ній проблеми. Безпека має бути вашим головним пріоритетом під час розробки смарт-контрактів!
Пов'язані інструменти
Контракти ОупенЗеппелін — Найпопулярніша бібліотека для безпечної розробки смарт-контрактів.
DappSys — Безпечні, прості та гнучкі будівельні блоки для смарт-контрактів.
HQ20 — Проєкт на Solidity з контрактами, бібліотеками та прикладами, які допоможуть вам створювати повнофункціональні розподілені застосунки для реального світу.
thirdweb Solidity SDK — Надає інструменти, необхідні для ефективного створення власних смарт-контрактів
Пов'язані посібники
- Міркування щодо безпеки для розробників Етеріуму — Посібник з міркувань безпеки під час створення смарт-контрактів, включаючи використання бібліотек.
- Розуміння смарт-контракту токена ERC-20 — Посібник зі стандарту ERC-20, який надається кількома бібліотеками.
Додаткові матеріали
Знаєте ресурс спільноти, який вам допоміг? Відредагуйте цю сторінку та додайте його!