Перейти к основному содержанию
Change page

Библиотеки смарт-контрактов

Последнее обновление страницы: 21 августа 2025 г.

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

Предварительные условия

Прежде чем переходить к библиотекам смарт-контрактов, неплохо было бы хорошо понять структуру смарт-контракта. Перейдите к анатомии умного контракта, если вы еще этого не сделали.

Что находится в библиотеке

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

Поведения

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

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

В качестве примера ниже приведена упрощенная версия контракта Ownableopens in a new tab из библиотеки контрактов OpenZeppelinopens 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: caller is not the owner");
10 _;
11 }
12}
Показать все

Чтобы использовать такой строительный блок в своем контракте, вам нужно сначала импортировать его, а затем расширить его в своих собственных контрактах. Это позволит вам использовать модификатор, предоставляемый базовым контрактом Ownable, для защиты ваших собственных функций.

1import ".../Ownable.sol"; // Path to the imported library
2
3contract MyContract is Ownable {
4 // The following function can only be called by the owner
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// This will load the @openzeppelin/contracts library from your 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 - Предоставляет инструменты, необходимые для эффективной разработки пользовательских смарт-контрактов

Дополнительные материалы

Знаете ресурс сообщества, который вам пригодился? Измените эту страницу и добавьте его!

Была ли эта статья полезной?