Ethereum Development 101: Урок 3: как импортировать внешний код в ваши смарт-контракты
Необходимое условие: эта статья является частью Ethereum Development 101, курса, предназначенного для обучения основным концепциям разработки, тестирования и развертывания смарт-контрактов в сети Ethereum.
Цели обучения. К концу этого урока вы сможете импортировать внешние смарт-контракты и библиотеки в Solidity.
Обзор
Начало работы в мире разработки смарт-контрактов может быть ошеломляющим. Часто существует множество предполагаемых знаний, которые нигде толком не объясняются. Например, импорт внешних контрактов и библиотек в ваши смарт-контракты.
Вы можете точно знать, что делает контракт, и что вашему контракту было бы лучше использовать его, но семантика фактического импорта его является препятствием.
В первые годы я помню, как копировал и вставлял код библиотеки в мои файлы .sol
в качестве обходного пути.
В этой статье объясняется, как импортировать любой внешний контракт или библиотеку в ваши смарт-контракты.
Ваша среда разработки
Первые шаги, которые вы делаете в разработке смарт-контрактов, скорее всего, используют Remix online IDE. Это фантастический инструмент для быстрого и легкого доступа к компилятору Solidity, чтобы вы могли выучить язык как можно быстрее.
Как только вы почувствуете уверенность в использовании Solidity, у вас, естественно, появится желание разрабатывать в локальной среде, в настольной IDE. Наличие кода в каталоге проекта, работающего локально, обеспечивает быструю разработку и позволяет использовать контроль версий и открытый исходный код.
Здесь на помощь приходит Truffle Suite.
Среда разработки мирового класса для блокчейн DApps (децентрализованных приложений) и смарт-контрактов. — Trufflesuite.com
Он хранит весь ваш код в одном месте без особой настройки, а кривая обучения, чтобы заставить что-то базовое работать, очень неглубокая.
В следующий раз, когда вы захотите создать новый проект, содержащий смарт-контракты, начните с Truffle. Давай сделаем это…
Начиная
Узел
Truffle работает на Node.js, поэтому, если вы еще не установили его, зайдите на их сайт и следуйте инструкциям по установке.
Трюфель
Используйте Node Package Manager (npm) для установки Truffle, запустив:
npm install -g truffle
Текстовый редактор
Убедитесь, что у вас установлена актуальная версия текстового редактора. Я использую VS Code.
После того, как все будет установлено, перейдите в предпочтительную рабочую область и создайте новый каталог, в котором будет находиться наш проект Truffle, а затем инициализируйте проект Truffle:
mkdir my-project cd my-project/ truffle init
Откройте новый каталог проекта в текстовом редакторе. Структура вашей папки должна выглядеть так, как показано на рисунке 1. Там должно быть три подкаталога: contract/
, migrations/
и test/
; и файл: truffle-config.js
.
contract/
— это место, где хранится наш код смарт-контракта Solidity. Truffle знает, что здесь нужно искать.sol
файлов для компиляции и переноса в блокчейн.migrations/
— это место, где находится наша логика миграции. Здесь мы можем описать шаги, необходимые при развертывании наших контрактов, чтобы они были правильно развернуты.test/
— это место, где мы будем писать для наших смарт-контрактов, чтобы убедиться, что они работают должным образом.truffle-config.js
содержит информацию о сетях, компиляторах, расположении файлов и других пользовательских конфигурациях, чтобы платформа Truffle знала, где находятся наши вещи. Пока не беспокойтесь об этом файле.
Установка и импорт
OpenZeppelin — это золотой стандарт многоразового репозитория для смарт-контрактов Ethereum. В этом проекте мы собираемся установить репозиторий контрактов в качестве зависимости, а затем импортировать контракт Ownable, чтобы мы могли ограничить доступ к определенным функциям.
Возможно, вы видели или использовали подобный шаблон раньше. При инициализации контракта адрес msg.sender
сохраняется в переменной состояния, указывающей владельца контракта. Используя пользовательский модификатор _onlyOwner
, некоторые функции ограничивают доступ, требуя, чтобы msg.sender
был равен владельцу.
В корне репозитория запустите:
npm install @openzeppelin/contracts --save
После завершения вы должны увидеть новую папку в корне с именем node_modules/
(если вы использовали Node или npm до того, как узнали об этом).
Внутри node_modules
npm загрузил репозиторий OpenZeppelin/contracts, в котором находятся все контракты и библиотеки, которые может предложить OpenZeppelin. Найдите минутку, чтобы просмотреть то, что предлагается.
Мы будем использовать контракт Ownable, который в корне проекта лежит в @openzeppelin-solidity/contracts/access/Ownable.sol
.
В папке contracts/
создайте новый файл Solidity, который будет импортировать контракт Ownable
. Я назову своего TestContract.sol
.
Первое, что нужно сделать, это объявить версию компилятора Solidity, мы используем 0.6.0
; затем нам нужно импортировать контракт Ownable
, используя найденный нами путь; и, наконец, нам нужно объявить контракт и то, что он простирается от Ownable
.
Рисунок 2показывает основу контракта после того, как мы все это сделали.
Не поверите, но это так!
При написании новых функций в этом контракте мы можем добавить модификатор onlyOwner
сразу после модификаторов public
, private
, internal
или external
, чтобы объявить, что функция должна выполняться только владельцем.
Вот простой пример:
// This function has no restrictions on who can call it function noRestrictions() public { ... }// This function is restricted only to the owner. Anyone else // who tries to call it will result in a reverted transaction function restrictedFunction() public onlyOwner { ... }
Чтобы убедиться, что контракт скомпилирован, когда вы добавили свои новые ограниченные функции, запустите:
truffle compile
Пожалуйста, добавляйте любые вопросы в комментарии ниже. Если вы закончили этот урок, сразу переходите к следующему:
Или вернитесь на страницу курса Ethereum Development 101, чтобы выбрать другой урок: