[Solidity] Ethereum + Python = Brownie
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Салют, дорогой криптоэнтузиаст!
Сегодня речь пойдёт о Brownie — аналоге фреймворка Truffle, который часто используется для разработки умных контрактов на Solidity, их тестирования и развёртывания (о чём можно почитать в цикле соответствующих статей здесь).
Так зачем же нужен ещё один фреймворк и в чём его ключевое отличие от Truffle?
- Во-первых, в них используются разные языки — в то время, как Truffle опирается на JS, не все знают этот язык и не всем его комфортно использовать; в brownie же в используется Python 3.
- Во-вторых, brownie за счёт интеграций различного софта делает разработку удобнее: тут и менеджер пакетов ethpm для умных контрактов, и ganache для развёртывания локальной тестовой цепочки, и тесты через pytest, и все версии компиляторов solc, и даже биндинги к MythX — инструменту для автоматического поиска ошибок в умных контрактах,- иначе говоря brownie предлагает инструменты для всего цикла разработки. Конечно Truffle тоже позволяет использовать все эти инструменты, однако они не встроены во фреймворк и их приходится устанавливать дополнительно.
- В-третьих, brownie позволяет работать не только с умными контрактами на Solidity, но и на vyper — типизированном python-based для разработки умных контрактов.
Таким образом, если вы предпочитаете работать с пайтоном и хотите упростить себе разработку умных контрактов, то однозначно стоит попробовать brownie.
Что же ещё умеет brownie?
Как сказано в самом репозитории brownie — это фреймворк разработки полного цикла умных контрактов для Ethereum-based платформ, поддерживающий:
- Несколько языков программирования умных контрактов: Solidity и Vyper.
- Сборку контрактов.
- Интерактивное взаимодействие с контрактами.
- Тестирование умных контрактов с помощью pytest.
- Скрипты для взаимодействия с умными контрактами.
- Работу с шаблонами умных контрактов.
Рассмотрим все эти возможности и организацию проекта на brownie подробнее, для чего установим brownie себе на машину. Сделать это проще всего можно с помощью pip:
pip install eth-brownie
Теперь brownie доступен как консольная утилита.
help для brownie
SPL
brownie --help
Brownie v1.6.9 - Python development framework for Ethereum
Usage: brownie <command> [<args>...] [options <args>]
Commands:
init Initialize a new brownie project
bake Initialize from a brownie-mix template
ethpm Commands related to the ethPM package manager
compile Compiles the contract source files
console Load the console
test Run test cases in the tests/ folder
run Run a script in the scripts/ folder
accounts Manage local accounts
gui Load the GUI to view opcodes and test coverage
analyze Find security vulnerabilities using the MythX API
Options:
--help -h Display this message
Type 'brownie <command> --help' for specific options and more information about
each command.
Проект brownie
Проект brownie представляет из себя определённую структуру директорий и конфигурационный файл brownie-config.yaml. Создать проект можно либо с помощью команды brownie init
Создание проекта с помощью init
SPL
brownie init salut_habr
Brownie v1.6.9 - Python development framework for Ethereum
SUCCESS: Brownie environment has been initiated at salut_habr
либо можно создать проект на основе шаблона с помощью команды brownie bake template_name
Создание проекта из шаблона
SPL
brownie bake token
Brownie v1.6.9 - Python development framework for Ethereum
Downloading from https://github.com/brownie-mix/token-mix/archive/master.zip...
5.62kiB [00:00, 2.82MiB/s]
SUCCESS: Brownie mix 'token' has been initiated at token
Далее я рассмотрю второй вариант на основе шаблона для ERC-20 токена (шаблон token).
Рассмотрим структуру проекта:
├───build # Здесь хранится информация, полученная в результате сборки и деплоя.
│ ├───contracts # Здесь хранятся скомпилированные контракты, их ABI и метаданные.
│ └───deployments # Здесь хранятся данные о раздеплоенных в сети умных контрактах.
├───contracts # Сами контракты (код и библиотеки).
├───interfaces # Интерфейсы умных контрактов.
├───reports # Отчёты анализаторов.
├───scripts # Python скрипты с доступом к окружению проекта и возможностью вызова через run.
└───tests # Тесты на базе pytest для умных контрактов.
Стоит отметить, что помимо перечисленных директорий brownie имеет конфигурационный файл, который находится в корне проекта и называется brownie-config.yaml — в нём можно указать опции компилятора, данные для подключения к ноде или параметры тестирования.
Команды brownie
brownie даже в базовой комплектации имеет множество команд, но я рассмотрю четыре из них, которые значительно чаще прочих используются в производственном цикле: compile, console, test и run.
brownie compile
Данная команда используется для компиляции умных контрактов, которые расположены в директории проекта contracts или её поддиректориях. Если необходимо, чтобы часть контрактов не компилировалась как самостоятельные единицы, то к названию файла или директории стоит приписать слева символ нижнего подчёркивания "_",- в таком случае компилятор brownie будет их игнорировать (это полезно при подключении библиотек к проекту).
Собранные контракты помещаются в ./build/contracts/ в виде одноимённых json-файлов, которые содержат ABI контрактов, их байт-код и дополнительную мета-информацию.
При компиляции brownie запоминает, какие контракты были скомпилированы, а какие ещё нет и компилирует только их. Но если нужно перекомпилировать все контракты, то можно сделать это добавив флаг -all.
Пример компиляции контрактов
SPL
brownie compile --all
Brownie v1.6.9 - Python development framework for Ethereum
Compiling contracts...
Solc version: 0.5.17+commit.d19bba13.Windows.msvc
Optimizer: Enabled Runs: 200
EVM Version: Istanbul
Generating build data...
- Token...
- SafeMath...
Brownie project has been compiled at C:\Users\Default\Documents\token\build\contracts
Параметры компиляции, такие как версия компилятора или оптимизация кода, задаются в файле brownie-config.yaml
brownie test
Этой командой запускаются тесты в проекте с использованием pytest, однако стоит заметить, что команда не возвращает никакое значение, поэтому есть трудности с интеграцией тестов в CI/CD.
Пример тестирования контрактов
SPL
brownie test
Brownie v1.6.9 - Python development framework for Ethereum
==================================================================================================== test session starts =====================================================================================================
platform win32 -- Python 3.8.3, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
rootdir: C:\Users\Default\Documents\token
plugins: eth-brownie-1.6.9, hypothesis-5.5.4, forked-1.1.3, xdist-1.31.0, web3-5.5.1
collecting ... Launching 'ganache-cli.cmd --port 8545 --gasLimit 6721975 --accounts 10 --hardfork istanbul --mnemonic brownie'...
collected 7 items
tests\test_approve_transferFrom.py ...... [ 85%]
tests\test_transfer.py . [100%]
===================================================================================================== 7 passed in 9.35s ======================================================================================================
Terminating local RPC client...
Тесты в проекте хранятся в директории tests/
brownie run
С помощью данной команды осуществляется запуск скриптов из директории scripts. Однако передача параметров в них поддерживается только с версии brownie 2.x, но даже без них удобно использовать данный функционал для интеграции с CI/CD (например для деплоя контрактов).
Деплой контрактов с помощью brownie run
SPL
brownie run token
Brownie v1.6.9 - Python development framework for Ethereum
TokenProject is the active project.
Launching 'ganache-cli.cmd --port 8545 --gasLimit 6721975 --accounts 10 --hardfork istanbul --mnemonic brownie'...
Running 'scripts.token.main'...
Transaction sent: 0xe36fbf7d93c1c91bde5e9290128999ed06ea54eb68352fb477fa91ce8072f472
Gas price: 0.0 gwei Gas limit: 549953
Token.constructor confirmed - Block: 1 Gas used: 549953 (100.00%)
Token deployed at: 0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87
Terminating local RPC client...
brownie console
Запускает интерактивный режим brownie: по сути он является интерпретатором установленной версии питона, но с заранее импортированными пространствами имён для проекта. Например для проекта токена мы имеем следующие переменные сразу после запуска:
brownie console
Brownie v1.6.9 - Python development framework for Ethereum
TokenProject is the active project.
Launching 'ganache-cli.cmd --port 8545 --gasLimit 6721975 --accounts 10 --hardfork istanbul --mnemonic brownie'...
Brownie environment is ready.
>>> dir()
[Fixed, Gui, SafeMath, Token, Wei, a, accounts, alert, compile_source, config, dir, history, network, project, rpc, run, web3]
Информацию о их назначении можно найти в документации brownie, однако подавляющая часть имён имеет то же предназначение, что и в web3py.
Работа с майнетом/тестнетами
Во всех примерах выше brownie поднимал ganache (локальное тестовое окружение Ethereum) и работал с ним, однако есть возможность работы с произвольной выбранной сетью (в том числе с приватным тестнетом и даже с Quorum!). Для этого используется параметр --network network_name при выполнении команд console и run, где network_name должна быть описана в brownie-config.yaml. По умолчанию там уже заданы майнеты ETH и ETC, а также локальный и публичные тестнеты. Однако можно добавлять свои сети в том числе добавляя в их свойства свои собственные параметры, если yaml позволяет это сделать. Обычно я при работе создаю дополнительно сети develop, test и master (по названиям веток в гите), а их блокчейны разворачиваю в Azure с помощью специальной службы.
Подводя итог можно сказать, что brownie на текущий момент уже достаточно зрелое Enterpise-ready решение для разработки под Ethereum и способен удовлетворить практически все возникающие в её процессе потребности. Питонистам и не только однозначно стоит попробовать сделать на нём свой следующий проект.
===========
Источник:
habr.com
===========
Похожие новости:
- [Информационная безопасность, Развитие стартапа] Блокчейн и стандартные базы данных. А есть ли разница
- [Node.JS, Криптовалюты] Как не создать с нуля криптовалюту за 3 года
- [Анализ и проектирование систем, Криптовалюты] Особенности обновлений узлов децентрализованных блокчейн-систем
- [DevOps, Криптовалюты, WebAssembly] Ontology запускает Layer 2, внося вклад в более комплексную платформу публичной цепочки (перевод)
- [Python, Программирование, Алгоритмы, Машинное обучение, Искусственный интеллект] Создание торгового бота используя машинное обучение в анализе временных рядов
- [Децентрализованные сети, Разработка мобильных приложений, Разработка под Android, Kotlin] Как мы сделали не blockchain
- [Криптовалюты] Ethereum 2.0 снова может быть отложен из-за ошибок, проблем и конкурентов
- [Децентрализованные сети, Системы обмена сообщениями] Y messenger: децентрализованный мессенджер на блокчейне*
- [Финансы в IT, Криптовалюты] Инвесторам TON предложили перевести их деньги в кредиты, а сам проект могут свернуть
- [Финансы в IT, Криптовалюты] Глупость в этой отрасли* просто невероятна
Теги для поиска: #_solidity, #_solidity, #_brownie, #_ethereum, #_blokchejn (блокчейн), #_umnye_kontrakty (умные контракты), #_solidity
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 19:07
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Салют, дорогой криптоэнтузиаст! Сегодня речь пойдёт о Brownie — аналоге фреймворка Truffle, который часто используется для разработки умных контрактов на Solidity, их тестирования и развёртывания (о чём можно почитать в цикле соответствующих статей здесь). Так зачем же нужен ещё один фреймворк и в чём его ключевое отличие от Truffle?
Таким образом, если вы предпочитаете работать с пайтоном и хотите упростить себе разработку умных контрактов, то однозначно стоит попробовать brownie. Что же ещё умеет brownie? Как сказано в самом репозитории brownie — это фреймворк разработки полного цикла умных контрактов для Ethereum-based платформ, поддерживающий:
Рассмотрим все эти возможности и организацию проекта на brownie подробнее, для чего установим brownie себе на машину. Сделать это проще всего можно с помощью pip: pip install eth-brownie Теперь brownie доступен как консольная утилита. help для brownieSPLbrownie --help
Brownie v1.6.9 - Python development framework for Ethereum Usage: brownie <command> [<args>...] [options <args>] Commands: init Initialize a new brownie project bake Initialize from a brownie-mix template ethpm Commands related to the ethPM package manager compile Compiles the contract source files console Load the console test Run test cases in the tests/ folder run Run a script in the scripts/ folder accounts Manage local accounts gui Load the GUI to view opcodes and test coverage analyze Find security vulnerabilities using the MythX API Options: --help -h Display this message Type 'brownie <command> --help' for specific options and more information about each command. Проект brownie Проект brownie представляет из себя определённую структуру директорий и конфигурационный файл brownie-config.yaml. Создать проект можно либо с помощью команды brownie init Создание проекта с помощью initSPLbrownie init salut_habr
Brownie v1.6.9 - Python development framework for Ethereum SUCCESS: Brownie environment has been initiated at salut_habr либо можно создать проект на основе шаблона с помощью команды brownie bake template_name Создание проекта из шаблонаSPLbrownie bake token
Brownie v1.6.9 - Python development framework for Ethereum Downloading from https://github.com/brownie-mix/token-mix/archive/master.zip... 5.62kiB [00:00, 2.82MiB/s] SUCCESS: Brownie mix 'token' has been initiated at token Далее я рассмотрю второй вариант на основе шаблона для ERC-20 токена (шаблон token). Рассмотрим структуру проекта: ├───build # Здесь хранится информация, полученная в результате сборки и деплоя.
│ ├───contracts # Здесь хранятся скомпилированные контракты, их ABI и метаданные. │ └───deployments # Здесь хранятся данные о раздеплоенных в сети умных контрактах. ├───contracts # Сами контракты (код и библиотеки). ├───interfaces # Интерфейсы умных контрактов. ├───reports # Отчёты анализаторов. ├───scripts # Python скрипты с доступом к окружению проекта и возможностью вызова через run. └───tests # Тесты на базе pytest для умных контрактов. Стоит отметить, что помимо перечисленных директорий brownie имеет конфигурационный файл, который находится в корне проекта и называется brownie-config.yaml — в нём можно указать опции компилятора, данные для подключения к ноде или параметры тестирования. Команды brownie brownie даже в базовой комплектации имеет множество команд, но я рассмотрю четыре из них, которые значительно чаще прочих используются в производственном цикле: compile, console, test и run. brownie compile Данная команда используется для компиляции умных контрактов, которые расположены в директории проекта contracts или её поддиректориях. Если необходимо, чтобы часть контрактов не компилировалась как самостоятельные единицы, то к названию файла или директории стоит приписать слева символ нижнего подчёркивания "_",- в таком случае компилятор brownie будет их игнорировать (это полезно при подключении библиотек к проекту). Собранные контракты помещаются в ./build/contracts/ в виде одноимённых json-файлов, которые содержат ABI контрактов, их байт-код и дополнительную мета-информацию. При компиляции brownie запоминает, какие контракты были скомпилированы, а какие ещё нет и компилирует только их. Но если нужно перекомпилировать все контракты, то можно сделать это добавив флаг -all. Пример компиляции контрактовSPLbrownie compile --all
Brownie v1.6.9 - Python development framework for Ethereum Compiling contracts... Solc version: 0.5.17+commit.d19bba13.Windows.msvc Optimizer: Enabled Runs: 200 EVM Version: Istanbul Generating build data... - Token... - SafeMath... Brownie project has been compiled at C:\Users\Default\Documents\token\build\contracts Параметры компиляции, такие как версия компилятора или оптимизация кода, задаются в файле brownie-config.yaml brownie test Этой командой запускаются тесты в проекте с использованием pytest, однако стоит заметить, что команда не возвращает никакое значение, поэтому есть трудности с интеграцией тестов в CI/CD. Пример тестирования контрактовSPLbrownie test
Brownie v1.6.9 - Python development framework for Ethereum ==================================================================================================== test session starts ===================================================================================================== platform win32 -- Python 3.8.3, pytest-5.4.1, py-1.8.1, pluggy-0.13.1 rootdir: C:\Users\Default\Documents\token plugins: eth-brownie-1.6.9, hypothesis-5.5.4, forked-1.1.3, xdist-1.31.0, web3-5.5.1 collecting ... Launching 'ganache-cli.cmd --port 8545 --gasLimit 6721975 --accounts 10 --hardfork istanbul --mnemonic brownie'... collected 7 items tests\test_approve_transferFrom.py ...... [ 85%] tests\test_transfer.py . [100%] ===================================================================================================== 7 passed in 9.35s ====================================================================================================== Terminating local RPC client... Тесты в проекте хранятся в директории tests/ brownie run С помощью данной команды осуществляется запуск скриптов из директории scripts. Однако передача параметров в них поддерживается только с версии brownie 2.x, но даже без них удобно использовать данный функционал для интеграции с CI/CD (например для деплоя контрактов). Деплой контрактов с помощью brownie runSPLbrownie run token
Brownie v1.6.9 - Python development framework for Ethereum TokenProject is the active project. Launching 'ganache-cli.cmd --port 8545 --gasLimit 6721975 --accounts 10 --hardfork istanbul --mnemonic brownie'... Running 'scripts.token.main'... Transaction sent: 0xe36fbf7d93c1c91bde5e9290128999ed06ea54eb68352fb477fa91ce8072f472 Gas price: 0.0 gwei Gas limit: 549953 Token.constructor confirmed - Block: 1 Gas used: 549953 (100.00%) Token deployed at: 0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87 Terminating local RPC client... brownie console Запускает интерактивный режим brownie: по сути он является интерпретатором установленной версии питона, но с заранее импортированными пространствами имён для проекта. Например для проекта токена мы имеем следующие переменные сразу после запуска: brownie console
Brownie v1.6.9 - Python development framework for Ethereum TokenProject is the active project. Launching 'ganache-cli.cmd --port 8545 --gasLimit 6721975 --accounts 10 --hardfork istanbul --mnemonic brownie'... Brownie environment is ready. >>> dir() [Fixed, Gui, SafeMath, Token, Wei, a, accounts, alert, compile_source, config, dir, history, network, project, rpc, run, web3] Информацию о их назначении можно найти в документации brownie, однако подавляющая часть имён имеет то же предназначение, что и в web3py. Работа с майнетом/тестнетами Во всех примерах выше brownie поднимал ganache (локальное тестовое окружение Ethereum) и работал с ним, однако есть возможность работы с произвольной выбранной сетью (в том числе с приватным тестнетом и даже с Quorum!). Для этого используется параметр --network network_name при выполнении команд console и run, где network_name должна быть описана в brownie-config.yaml. По умолчанию там уже заданы майнеты ETH и ETC, а также локальный и публичные тестнеты. Однако можно добавлять свои сети в том числе добавляя в их свойства свои собственные параметры, если yaml позволяет это сделать. Обычно я при работе создаю дополнительно сети develop, test и master (по названиям веток в гите), а их блокчейны разворачиваю в Azure с помощью специальной службы. Подводя итог можно сказать, что brownie на текущий момент уже достаточно зрелое Enterpise-ready решение для разработки под Ethereum и способен удовлетворить практически все возникающие в её процессе потребности. Питонистам и не только однозначно стоит попробовать сделать на нём свой следующий проект. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 19:07
Часовой пояс: UTC + 5