Демонстрирует настройку среды и тесты для простого 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
).