GodMode — это набор инструментов для разработки, позволяющий пользователям взять на себя управление сторонними контрактами и протоколами в средах тестирования Ethereum. Разработчики могут разветвлять основную сеть, а также получать доступ и вызывать методы для любого контракта в ней, особенно для тех, которые обычно им недоступны, что позволяет проводить гораздо более надежное интеграционное тестирование для любых наборов смарт-контрактов, которые они создают.
Если вы разрабатываете смарт-контракты, они, вероятно, каким-то образом интегрируются с существующими сторонними протоколами. Например, ваши смарт-контракты могут взаимодействовать с UniSwap или Maker. Эти взаимодействия создают зависимости от ожидаемой функции этих внешних смарт-контрактов. Но что, если ваша внешняя зависимость начнет вести себя неожиданным образом (или даже полностью исчезнет)? Что будет делать ваш уровень смарт-контракта? GodMode упрощает моделирование таких событий, позволяя соответствующим образом адаптировать поведение вашего приложения.
К счастью, вам не нужно изучать дополнительные технологии: GodMode построен на базе Truffle и расширяет функциональные возможности Ganache с помощью собственного интерфейса командной строки, GodMode Ganache. Интерфейс командной строки.
Эта статья представляет собой пошаговое руководство по примеру проекта GodMode, в котором показано, как GodMode может получить доступ к методам как в пользовательских, так и во внешних (то есть сторонних) контрактах.
Предварительные требования
Вам потребуется установить Truffle, GodMode Ganache CLI и создать конечную точку основной сети Infura в дополнение к примеру проекта GodMode.
- Запустите
$ npm install -g truffle
на своей машине разработки. - Создайте конечную точку Infura в своей учетной записи в основной сети. Обратите внимание на идентификатор проекта на вкладке «Настройки».
- Клонируйте GodMode Ganache CLI на свой компьютер.
- Клонируйте Проект Godmode Sample Project на свой компьютер.
Пользовательские контракты
Демонстрация пользовательского контракта — это простая реализация, которая запускается на любом локальном Ganache и позволяет нам выполнять привилегированную функцию (переворачивание логического значения в контракте). Есть две стороны: Алекс и Бет. Как контролер контракта, Алекс начинает с того, что имеет эксклюзивное право переворачивать логическое значение. В GodMode Бет может взять на себя эту силу.
- На терминале в папке godmode-ganache-cli (скопированной на шаге 3 выше) запустите
$ npm run start
. Эта команда устанавливает блок-цепочку тестирования GodMode Ganache, которую мы будем использовать для выполнения нашей демонстрации. - Откройте другой терминал в папке godmode-sample-projects (клонирован на шаге 4 выше). Запустите
$ npm install
, чтобы получить зависимости. - В том же терминале запустите
$ truffle test test/CustomContracts.test.js
.
Ваша система выполнит тесты, и ваш вывод должен закончиться примерно так:
В начале Алекс может инвертировать логическое значение, а Бет явно запрещено это делать. Как мы видим в GodMode, теперь Бет тоже может его перевернуть. Итак, теперь, когда мы увидели фундаментальный принцип в действии, мы можем перейти к чему-то более значимому: манипулированию внешними контрактами.
Внешние контракты
Здесь мы демонстрируем использование GodMode для чеканки DAI с помощью Maker, изменения адреса сборщика комиссий в UniSwap и распределения составных токенов CToken по адресу по нашему выбору.
- На терминале в папке godmode-ganache-cli (как клонировано на шаге 3 в разделе «Предварительные требования») запустите
$ export INFURA_PROJECT_ID=<your-infura-project-id>
subbing в созданном ранее идентификаторе проекта Infura. Это создает локальную переменную, которую CLI GodMode Ganache будет использовать для запуска форка основной сети с использованием вашей учетной записи Infura. - В том же терминале запустите
$ npm run start-fork
. Запустится форк основной сети. - Откройте второй терминал в папке godmode-sample-projects и запустите
$ npm install
. - Затем в том же терминале запустите
$ npx godmode install
. Это установит библиотеку внешних контрактов GodMode, что позволит вам получить контроль над Maker, UniSwap и Compound. - Наконец, в том же терминале запустите
$ truffle test test/ExternalContracts.test.js
.
Ваш вывод должен выглядеть примерно так:
Как видите, мы успешно выполнили методы для трех внешних протоколов, к которым у нас обычно нет доступа.