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

Если вы разрабатываете смарт-контракты, они, вероятно, каким-то образом интегрируются с существующими сторонними протоколами. Например, ваши смарт-контракты могут взаимодействовать с UniSwap или Maker. Эти взаимодействия создают зависимости от ожидаемой функции этих внешних смарт-контрактов. Но что, если ваша внешняя зависимость начнет вести себя неожиданным образом (или даже полностью исчезнет)? Что будет делать ваш уровень смарт-контракта? GodMode упрощает моделирование таких событий, позволяя соответствующим образом адаптировать поведение вашего приложения.

К счастью, вам не нужно изучать дополнительные технологии: GodMode построен на базе Truffle и расширяет функциональные возможности Ganache с помощью собственного интерфейса командной строки, GodMode Ganache. Интерфейс командной строки.

Эта статья представляет собой пошаговое руководство по примеру проекта GodMode, в котором показано, как GodMode может получить доступ к методам как в пользовательских, так и во внешних (то есть сторонних) контрактах.

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

Вам потребуется установить Truffle, GodMode Ganache CLI и создать конечную точку основной сети Infura в дополнение к примеру проекта GodMode.

  1. Запустите $ npm install -g truffle на своей машине разработки.
  2. Создайте конечную точку Infura в своей учетной записи в основной сети. Обратите внимание на идентификатор проекта на вкладке «Настройки».
  3. Клонируйте GodMode Ganache CLI на свой компьютер.
  4. Клонируйте Проект Godmode Sample Project на свой компьютер.

Пользовательские контракты

Демонстрация пользовательского контракта — это простая реализация, которая запускается на любом локальном Ganache и позволяет нам выполнять привилегированную функцию (переворачивание логического значения в контракте). Есть две стороны: Алекс и Бет. Как контролер контракта, Алекс начинает с того, что имеет эксклюзивное право переворачивать логическое значение. В GodMode Бет может взять на себя эту силу.

  1. На терминале в папке godmode-ganache-cli (скопированной на шаге 3 выше) запустите $ npm run start. Эта команда устанавливает блок-цепочку тестирования GodMode Ganache, которую мы будем использовать для выполнения нашей демонстрации.
  2. Откройте другой терминал в папке godmode-sample-projects (клонирован на шаге 4 выше). Запустите $ npm install, чтобы получить зависимости.
  3. В том же терминале запустите $ truffle test test/CustomContracts.test.js.

Ваша система выполнит тесты, и ваш вывод должен закончиться примерно так:

В начале Алекс может инвертировать логическое значение, а Бет явно запрещено это делать. Как мы видим в GodMode, теперь Бет тоже может его перевернуть. Итак, теперь, когда мы увидели фундаментальный принцип в действии, мы можем перейти к чему-то более значимому: манипулированию внешними контрактами.

Внешние контракты

Здесь мы демонстрируем использование GodMode для чеканки DAI с помощью Maker, изменения адреса сборщика комиссий в UniSwap и распределения составных токенов CToken по адресу по нашему выбору.

  1. На терминале в папке godmode-ganache-cli (как клонировано на шаге 3 в разделе «Предварительные требования») запустите $ export INFURA_PROJECT_ID=<your-infura-project-id> subbing в созданном ранее идентификаторе проекта Infura. Это создает локальную переменную, которую CLI GodMode Ganache будет использовать для запуска форка основной сети с использованием вашей учетной записи Infura.
  2. В том же терминале запустите $ npm run start-fork. Запустится форк основной сети.
  3. Откройте второй терминал в папке godmode-sample-projects и запустите $ npm install.
  4. Затем в том же терминале запустите $ npx godmode install. Это установит библиотеку внешних контрактов GodMode, что позволит вам получить контроль над Maker, UniSwap и Compound.
  5. Наконец, в том же терминале запустите $ truffle test test/ExternalContracts.test.js.

Ваш вывод должен выглядеть примерно так:

Как видите, мы успешно выполнили методы для трех внешних протоколов, к которым у нас обычно нет доступа.