Пошаговое руководство по импорту внешнего кода в смарт-контракты.

Когда начать

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

Вы можете точно знать, что делает контракт, и что вашему контракту было бы лучше его использовать, но семантика его фактического импорта является препятствием.

В первые дни я помню, как копировал и вставлял код библиотеки в свои .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

Если все в порядке, вы можете начать работу над переносом ваших контрактов в локальный блокчейн, написанием тестов и развертыванием в общедоступной тестовой сети!

Дальнейшее чтение

Если вас интересует разработка блокчейнов, я пишу учебные пособия, пошаговые руководства, подсказки и советы о том, как начать работу и создать портфолио. Ознакомьтесь с некоторыми из этих ресурсов: