---
title: "Бібліотеки смарт-контрактів"
description: "Відкрийте для себе бібліотеки смарт-контрактів та будівельні блоки багаторазового використання, щоб прискорити розробку ваших проєктів на Етеріумі."
lang: uk
---

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

## Передумови {#prerequisites}

Перш ніж переходити до бібліотек смарт-контрактів, варто добре зрозуміти структуру смарт-контракту. Перейдіть до розділу [анатомія смарт-контракту](/developers/docs/smart-contracts/anatomy/), якщо ви цього ще не зробили.

## Що міститься в бібліотеці {#whats-in-a-library}

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

### Поведінка {#behaviors}

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

Бібліотеки смарт-контрактів зазвичай надають реалізації такої поведінки для багаторазового використання у вигляді [бібліотек](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries) або через [успадкування](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#inheritance) в Solidity.

Як приклад, нижче наведено спрощену версію [контракту `Ownable`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/access/Ownable.sol) з [бібліотеки контрактів ОупенЗеппелін](https://github.com/OpenZeppelin/openzeppelin-contracts), який призначає адресу власником контракту та надає модифікатор для обмеження доступу до методу лише для цього власника.

```solidity
contract Ownable {
    address public owner;

    constructor() internal {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
}
```

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

```solidity
import ".../Ownable.sol"; // Шлях до імпортованої бібліотеки

contract MyContract is Ownable {
    // Наступна функція може бути викликана лише власником
    function secured() onlyOwner public {
        msg.sender.transfer(1 ether);
    }
}
```

Іншим популярним прикладом є [SafeMath](https://docs.openzeppelin.com/contracts/3.x/utilities#math) або [DsMath](https://dappsys.readthedocs.io/en/latest/ds_math.html). Це бібліотеки (на відміну від базових контрактів), які надають арифметичні функції з перевірками на переповнення, що не передбачені самою мовою. Використання будь-якої з цих бібліотек замість нативних арифметичних операцій є хорошою практикою для захисту вашого контракту від переповнення, яке може мати катастрофічні наслідки!

### Стандарти {#standards}

Для полегшення [компонованості та інтероперабельності](/developers/docs/smart-contracts/composability/) спільнота Етеріуму визначила кілька стандартів у формі **ERC**. Ви можете дізнатися більше про них у розділі [стандартів](/developers/docs/standards/).

Включаючи ERC як частину ваших контрактів, варто шукати стандартні реалізації, а не намагатися створити власні. Багато бібліотек смарт-контрактів містять реалізації найпопулярніших ERC. Наприклад, повсюдний [стандарт взаємозамінного токена ERC-20](/developers/tutorials/understand-the-erc-20-token-smart-contract/) можна знайти в [HQ20](https://github.com/HQ20/contracts/blob/master/contracts/token/README.md), [DappSys](https://github.com/dapphub/ds-token/) та [ОупенЗеппелін](https://docs.openzeppelin.com/contracts/3.x/erc20). Крім того, деякі ERC також надають канонічні реалізації як частину самого ERC.

Варто зазначити, що деякі ERC не є самостійними, а є доповненнями до інших ERC. Наприклад, [ERC-2612](https://eips.ethereum.org/EIPS/eip-2612) додає розширення до ERC-20 для покращення його зручності використання.

## Як додати бібліотеку {#how-to}

Завжди звертайтеся до документації бібліотеки, яку ви підключаєте, щоб отримати конкретні інструкції щодо її додавання у ваш проєкт. Деякі бібліотеки контрактів Solidity запаковані за допомогою `npm`, тому ви можете просто використати `npm install` для них. Більшість інструментів для [компіляції](/developers/docs/smart-contracts/compiling/) контрактів шукатимуть бібліотеки смарт-контрактів у вашій теці `node_modules`, тому ви можете зробити наступне:

```solidity
// Це завантажить бібліотеку @openzeppelin/contracts з ваших node_modules
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract MyNFT is ERC721 {
    constructor() ERC721("MyNFT", "MNFT") public { }
}
```

Незалежно від методу, який ви використовуєте, під час підключення бібліотеки завжди звертайте увагу на версію [мови](/developers/docs/smart-contracts/languages/). Наприклад, ви не можете використовувати бібліотеку для Solidity 0.6, якщо ви пишете свої контракти на Solidity 0.5.

## Коли використовувати {#when-to-use}

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

Безпека також є великим плюсом. Бібліотеки смарт-контрактів з відкритим вихідним кодом часто піддаються ретельній перевірці. Оскільки від них залежить багато проєктів, спільнота має сильний стимул постійно їх перевіряти. Набагато частіше можна знайти помилки в коді застосунку, ніж у бібліотеках контрактів багаторазового використання. Деякі бібліотеки також проходять [зовнішні аудити](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/audits) для додаткової безпеки.

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

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

## Пов'язані інструменти {#related-tools}

**Контракти ОупенЗеппелін —** **_Найпопулярніша бібліотека для безпечної розробки смарт-контрактів._**

- [Документація](https://docs.openzeppelin.com/contracts/)
- [GitHub](https://github.com/OpenZeppelin/openzeppelin-contracts)
- [Форум спільноти](https://forum.openzeppelin.com/c/general/16)

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

- [Документація](https://dappsys.readthedocs.io/)
- [GitHub](https://github.com/dapphub/dappsys)

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

- [GitHub](https://github.com/HQ20/contracts)

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

- [Документація](https://portal.thirdweb.com/contracts/build/overview)
- [GitHub](https://github.com/thirdweb-dev/contracts)

## Пов'язані посібники {#related-tutorials}

- [Міркування щодо безпеки для розробників Етеріуму](/developers/docs/smart-contracts/security/) _— Посібник з міркувань безпеки під час створення смарт-контрактів, включаючи використання бібліотек._
- [Розуміння смарт-контракту токена ERC-20](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _— Посібник зі стандарту ERC-20, який надається кількома бібліотеками._

## Додаткові матеріали {#further-reading}

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