Библиотеки смарт-контрактов
Вам не нужно писать каждый смарт-контракт в вашем проекте с нуля. Существует множество библиотек смарт-контрактов с открытым исходным кодом, которые предоставляют готовые строительные блоки для вашего проекта, что избавит вас от необходимости изобретать велосипед.
Предварительные требования
Прежде чем переходить к библиотекам смарт-контрактов, полезно хорошо понимать структуру смарт-контракта. Перейдите к разделу анатомия смарт-контракта, если вы этого еще не сделали.
Что находится в библиотеке
Обычно в библиотеках смарт-контрактов можно найти два вида строительных блоков: повторно используемые модели поведения, которые вы можете добавить в свои контракты, и реализации различных стандартов.
Поведение
При написании смарт-контрактов велика вероятность того, что вы будете писать похожие шаблоны снова и снова, например, назначать адрес администратора для выполнения защищенных операций в контракте или добавлять кнопку экстренной паузы на случай непредвиденной проблемы.
Библиотеки смарт-контрактов обычно предоставляют повторно используемые реализации такого поведения в виде библиотек (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, предоставляемому несколькими библиотеками.
Дополнительная литература
Знаете ресурс сообщества, который вам помог? Отредактируйте эту страницу и добавьте его!