Перейти до основного контенту
Change page

Бібліотека розумних контрактів

Останні оновлення сторінки: 21 серпня 2025 р.

Вам не потрібно виписувати кожен розумний контракт до Вашого проекту з нуля. Існує багато бібліотек розумних контрактів з відкритим початковим кодом, які надають багаторазово використані коди для Вашого проекту, що може позбавити Вас необхідності створювати це заново.

Передумови

Перед тим, як переходити до бібліотеки розумних контрактів, було б правильно спершу зрозуміти структуру самого розумного контракту. Перейдіть до розділу анатомія смарт-контрактів, якщо ви ще цього не зробили.

Що всередині бібліотеки

Зазвичай у бібліотеках смарт-контрактів можна знайти два види будівельних блоків: поведінки для повторного використання, які можна додавати до своїх контрактів, та імплементації різних стандартів.

Поведінки

Під час написання смарт-контрактів є велика ймовірність того, що ви знову й знову писатимете схожі патерни, як-от призначення адреси адміністратора для виконання захищених операцій у контракті або додавання кнопки екстреної паузи на випадок неочікуваної проблеми.

Бібліотеки смарт-контрактів зазвичай надають багаторазові імплементації таких моделей поведінки як бібліотекиopens in a new tab або через наслідуванняopens in a new tab в Solidity.

Як приклад, нижче наведено спрощену версію контракту Ownableopens in a new tab з бібліотеки OpenZeppelin Contractsopens in a new tab, який визначає адресу як власника контракту та надає модифікатор для обмеження доступу до методу лише цьому власнику.

1contract Ownable {
2 address public owner;
3
4 constructor() internal {
5 owner = msg.sender;
6 }
7
8 modifier onlyOwner() {
9 require(owner == msg.sender, "Ownable: той, хто викликає, не є власником");
10 _;
11 }
12}
Показати все

Щоб використовувати такий блок формування у своєму контракті, вам слід спочатку імпортувати його, а потім поширити його у власних контрактах. Це дозволить вам використовувати модифікатор, наданий базовим контрактом Ownable, для захисту ваших власних функцій.

1import ".../Ownable.sol"; // Шлях до імпортованої бібліотеки
2
3contract MyContract is Ownable {
4 // Наступну функцію може викликати лише власник
5 function secured() onlyOwner public {
6 msg.sender.transfer(1 ether);
7 }
8}

Іншим популярним прикладом є SafeMathopens in a new tab або DsMathopens in a new tab. Це бібліотеки (на противагу базовим договорам), які забезпечують арифметичні функції переповненням чеками, які не забезпечуються мовою. Корисно використовувати будь -яку з цих бібліотек замість власних арифметичних операцій, щоб захистити ваш контракт від переповнення, що може мати катастрофічні наслідки!

Стандарти

Щоб полегшити компонування та сумісність, спільнота Ethereum визначила кілька стандартів у формі ERC. Ви можете прочитати більше про них у розділі стандарти.

При включенні ERC як частини ваших контрактів, було б краще пошукати стандартні реалізації, а не намагатись втілити свої власні. Багато бібліотек розумних контрактів включають реалізації найпопулярніших ERC. Наприклад, поширений стандарт взаємозамінних токенів ERC20 можна знайти в HQ20opens in a new tab, DappSysopens in a new tab та OpenZeppelinopens in a new tab. Крім того, деякі ERC також надають обов'язкову реалізацію як частину самого ERC.

Варто зазначити, що деякі ERC не є самостійними, але є доповненнями до інших ERC. Наприклад, ERC2612opens in a new tab додає розширення до ERC20 для покращення зручності його використання.

Як додати бібліотеку

Завжди звертайтесь до документації бібліотеки, яку ви включаєте, для отримання конкретних інструкцій щодо того, як включити її до свого проекту. Кілька бібліотек контрактів Solidity запаковані за допомогою npm, тож ви можете просто встановити їх за допомогою npm install. Більшість інструментів для компіляції контрактів будуть шукати бібліотеки смарт-контрактів у вашому node_modules, тому ви можете зробити наступне:

1// Це завантажить бібліотеку @openzeppelin/contracts з вашого node_modules
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}

Незалежно від методу, який ви використовуєте, під час додавання бібліотеки завжди слідкуйте за версією мови. Наприклад, ви не можете використовувати бібліотеку для Solidity 0.6, якщо ви пишете свої контракти на Solidity 0.5.

Коли використовувати

Використання розумної контрактної бібліотеки для вашого проєкту має декілька переваг. Перш за все, це економить ваш час, надаючи готові до використання будівельні блоки, які ви можете включити у свою систему, замість того, щоб кодувати їх самостійно.

Безпека також є важливим плюсом. Бібліотеки смарт -контрактів з відкритим вихідним кодом також часто ретельно перевіряються. Враховуючи, що багато проєктів залежать від них, громада має сильний стимул тримати їх під постійним оглядом. Значно частіше виявляють помилки в коді програми, ніж у бібліотеках контрактів, які можна використовувати багаторазово. Деякі бібліотеки також проходять зовнішній аудитopens in a new tab для додаткової безпеки.

Однак використання бібліотек смарт -контрактів несе ризик включення незнайомого вам коду до вашого проєкту. Спокусливо імпортувати контракт і включати його безпосередньо у свій проект, але без гарного розуміння того, що робить цей контракт, ви можете ненавмисно внести проблему у свою систему через несподівану поведінку. Завжди читайте документацію коду, який імпортуєте, а потім перегляньте сам код, перш ніж зробити його частиною вашого проєкту!

Нарешті, приймаючи рішення про те, чи включати бібліотеку, розглянемо її загальне використання. Широко прийнятий має переваги у тому, що більша громада та більше очей придивляються до проблем. Безпека повинна бути вашим основним напрямком при створенні смарт -контрактів!

OpenZeppelin Contracts - Найпопулярніша бібліотека для розробки безпечних смарт-контрактів.

DappSys - Безпечні, прості й гнучкі будівельні блоки для смарт-контрактів.

HQ20 - Проєкт Solidity з контрактами, бібліотеками та прикладами, які допоможуть вам створювати повнофункціональні розподілені застосунки для реального світу.

thirdweb Solidity SDK - Надає інструменти, необхідні для ефективного створення користувацьких смарт-контрактів

Для подальшого читання

Знайшли ресурс, який допоміг з цією темою? Відредагуйте цю сторінку і додайте його!

Чи була ця стаття корисною?