Пошаговое руководство по импорту внешнего кода в смарт-контракты.
Когда начать
Начало работы в мире разработки смарт-контрактов может быть непосильным. Часто существует множество предполагаемых знаний, которые нигде не особо хорошо объяснены. Например, импорт внешних контрактов и библиотек в ваши смарт-контракты.
Вы можете точно знать, что делает контракт, и что вашему контракту было бы лучше его использовать, но семантика его фактического импорта является препятствием.
В первые дни я помню, как копировал и вставлял код библиотеки в свои .sol
файлы в качестве временного решения.
В этой статье объясняется, как импортировать любой внешний контракт или библиотеку в ваши смарт-контракты.
Переходя от ремикса
Первые шаги в разработке смарт-контрактов, скорее всего, будут с использованием Remix online IDE. Это фантастический инструмент для быстрого и легкого доступа к компилятору Solidity, чтобы вы могли выучить язык как можно быстрее.
Как только вы научитесь использовать Solidity, у вас естественным образом возникнет желание развиваться в локальной среде, в настольной среде IDE. Наличие кода в каталоге проекта, выполняемого локально, обеспечивает быструю разработку и позволяет использовать контроль версий и открытый исходный код.
Вот тут-то и появляется Truffle Suite.
Среда разработки мирового класса для децентрализованных приложений (децентрализованных приложений) и смарт-контрактов. - Trufflesuite.com
Он хранит весь ваш код в одном месте без особой настройки, и кривая обучения, чтобы получить что-то базовое, работает очень неглубоко.
В следующий раз, когда вы придете создавать новый проект, содержащий смарт-контракты, начните с Truffle. Давай сделаем это…
Начиная
Узел
Truffle работает на Node.js, поэтому, если вы еще не установили его, перейдите на их веб-сайт и следуйте инструкциям по установке.
Трюфель
Используйте диспетчер пакетов узлов (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. Трюффл знает, что здесь нужно искать.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 / контрактов, в котором находятся все контракты и библиотеки, которые 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
Если все в порядке, вы можете начать работу над переносом ваших контрактов в локальный блокчейн, написанием тестов и развертыванием в общедоступной тестовой сети!
Дальнейшее чтение
Если вас интересует разработка блокчейнов, я пишу учебные пособия, пошаговые руководства, подсказки и советы о том, как начать работу и создать портфолио. Ознакомьтесь с некоторыми из этих ресурсов: