Демонстрирует настройку среды и тесты для простого Ethereum стандарт ERC-20 токена, написанного на Solidity.
- python3 version 3.6 or greater, python3-dev
- ganache-cli - tested with version 6.11.0
с помощью pipx
Рекомендованная. Установит brownie в виртуальное окружение и сделает его доступным глобально, без необходимости каждый раз окружение активировать.
Установка pipx:
python3 -m pip install --user pipx
python3 -m pipx ensurepathУстановка brownie через pipx:
pipx install eth-brownieс помощью pip:
pip install eth-brownieВ данном репозитории содержится Базовый Шаблон для токена, поверх которого можно написать свой собственный токен, а также тесты, покрывающие 100% стандартного ERC20 функционала.
contracts/: Источники контрактовinterfaces/: Источники интерфейсаscripts/: Скрипты для развертывания и взаимодействияtests/: Скрипты для тестирования проекта
Следующие папки также создаются и используются внутри Brownie для управления проектом. Вы не должны редактировать или удалять файлы в этих папках.
build/: Данные проекта, такие как артефакты компилятора и результаты юнит-тестов.reports/: JSON файлы отчетов для использования в Brownie GUI
- Консоль полезна для быстрого тестирования и отладки.
- Скрипты позволяют автоматизировать общие задачи и обрабатывать развертывания.
- Тесты помогают убедиться в том, что ваши контракты выполняются по назначению.
- Создать пустой проект brownie:
brownie init - Компиляция контрактов:
brownie compile - Открыть консоль:
brownie console - Выполнить тесты:
brownie test
Чтобы скомпилировать все имеющиеся в папке /contracts контракты (даже во вложенных папках), выполните:
brownie compileВ данном примере там находится всего один файл Token.sol
Чтобы задеплоить тестовый токен, нужна функция deploy:
token = Token.deploy("Test Token", "TST", 18, 1e21, {'from': accounts[0]})
Transaction sent: 0x4a61edfaaa8ba55573603abd35403cf41291eca443c983f85de06e0b119da377
Gas price: 0.0 gwei Gas limit: 12000000
Token.constructor confirmed - Block: 1 Gas used: 521513 (4.35%)
Token deployed at: 0xd495633B90a237de510B4375c442C0469D3C161CДанный код помещен в скрипт scripts/deploy.py.
Для деплоя тестового контракта можно выполнить функцию напрямую в консоли, или вызвать этот скрипт:
brownie run deploy.pyЕсли не указывать сеть для деплоя, то контракт будет задеплоен в локальную тестовую сеть, которую поднимает Ganache.
После выполнения команды деплоя, мы имеем контракт с начальным балансом в 1e21, привязанный к счёту accounts[0].
Убедитесь в этом, вызвав в консоли следующие команды:
>>> token
<Token Contract '0xd495633B90a237de510B4375c442C0469D3C161C'>
>>> token.balanceOf(accounts[0])
1000000000000000000000
>>> token.transfer(accounts[1], 1e18, {'from': accounts[0]})
Transaction sent: 0xb94b219148501a269020158320d543946a4e7b9fac294b17164252a13dce9534
Gas price: 0.0 gwei Gas limit: 12000000
Token.transfer confirmed - Block: 2 Gas used: 51668 (0.43%)
<Transaction '0xb94b219148501a269020158320d543946a4e7b9fac294b17164252a13dce9534'>Чтобы выполнить все тесты, выполните:
brownie testБлок-тесты, входящие в эту смесь, очень стандартные и должны работать с любым
смарт-контрактом, совместимым с ERC20. Чтобы использовать их для своего токена, достаточно изменить логику
развертывания в функции token (tests/conftest.py::token).