布朗尼(Brownie)——以太坊的智能合约基础框架

一提到到布朗尼,可千万不要以为就是那种黑色巧克力味的美味小蛋糕,这里说到的布朗尼,指的是以太坊上,名为布朗尼的智能合约基础框架。布朗尼用于开发以太坊智能合约,其稳健性和易于使用性都非常的高,常被用来进行:

·        部署:自动将许多合同部署到区块链上,初始化或者集成它们所需的任何交易。

·        交互:编写脚本,或者使用控制台与主网上的合同进行交互,或是在本地环境中进行快速测试。

·        调试:在事务恢复时获取详细信息,以帮助您快速查明问题。

·        测试:用Python编写单元测试,并基于堆栈跟踪分析评估测试覆盖率。

接下来我们来试着在Solidity中创建一个非常简单的智能合约,仅公开两个外部函数getValue和setValue. 把这个智能合约保存在文件smart_contract.sol.

接下来通过布朗尼部署此智能合约并与之交互。

设定

此次尝试使用的是Python3.7和virtualenv隔离我们的环境。如果没有安装Python3.7,可以按照以下步骤操作。

我们将会使用Ganache,它是用于以太坊开发的个人区块链。你也可以改为安装ethereum-testrpc,但会导致无法运行图形界面。安装Ganache时,要按照步骤进行。

为你的Solidity项目创建虚拟环境。此处已创建,并命名为TestBrownie. 安装布朗尼。

要初始化一个空项目,先从创建一个新文件夹开始。在该文件夹中,键入:

项目结构

每个布朗尼项目均含以下文件夹:

·        contracts/:合同来源

·        interfaces/:接口源

·        scripts/:用于部署和交互的脚本

·        tests/:用于测试项目的脚本

·        brownie-config.yaml:项目的配置文件

下面这些文件夹也由布朗尼创建,并在内部用于项目管理,不可编辑或删除。

·        build/:项目数据,例如编译器工件和单元测试结果

·        reports/:在GUI中使用的JSON报告文件

编译

smart_contract.sol在contracts目录中复制您的智能合约。编译contracts/项目子文件夹中的所有合同源:

每次编译器运行时,布朗尼都会将每个合同源的哈希值与现有已编译版本的哈希值进行比较。如果合同没有更改,则不会重新编译。如果你希望强制重新编译整个项目,请使用brownie compile –all.

如果要编译具有其它版本的Solidity合同,只需要在.sol文件的使用说明中提及该合同即可。如果不存在,它将自动安装。此处应该注意:编码器的设置位于brownie-config.yaml.

修改任何编译器设置将会导致项目的完全重新编译。

如果在配置文件中设置了编译器版本,则将使用该版本来编译项目中的所有合同。版本应以格式的字符串形式给出0.x.x.

如果版本设置为null,则布朗尼会查看每个合同的版本使用程序,并使用已安装的最新匹配编译器版本。

关于evm_version,布朗尼根据编译器设置规则集。

·        Byzantium: Solidity <=0.5.4

·        Petersburg: Solidity >=0.5.5< =0.5.12

·        Istanbul: Solidity >=0.5.13, Vyper

你也可以手动设置EVM版本。有效的选项为byzantium,constantinople,petersburg和istanbul. 还可以使用Ethereum Classic规则集atlantis和agharta,在传递给编译器之前,它们会转换为等效的以太坊。

注意:布朗尼支持的Solidity版本>=0.4.22和Vyper 版本0.1.0-b16.

成功编译后,布朗尼将SimpleContract.json在builds/contract文件夹中创建一个文件。

部署

打开brownie-config.yaml,它有一个网络部分,你可以自定义现有网络,也可以在网络下创建一个新块。此处使用在端口7545上运行的Ganache GUI.

在网络下创建一个私有块。

保存此文件。现在使用布朗尼控制台部署编译的智能合约。它与常规Python解释器非常相似。从项目文件夹中,通过键入以下内容加载它:

使用在Ganache GUI上可见的账户来交叉检查输出中的账户。

每个单独的账户都由Account可以执行操作的对象表示,例如查询余额或发送ETH.

每个可部署的合同和库都有一个ContractContainer用于部署新合同和访问现有合同。所有已编译的合同都可以作为同名变量使用。

部署带有账户的合同0:

如果键入SimpleContract,则可以看到SimpleContract作为ContractContainer对象的已部署实例的列表。

相互作用

参阅此合同上可用的方法:

从在智能合约中设置变量开始。

每个交易返回一个TransactionReceipt对象。该对象包含有关交易的所有相关信息,以及各种有助于恢复交易的调试方法。要获取有关交易的可读信息,使用TransactionReceipt.info().

检查时使用:

以上就是关于布朗尼的基础知识,如果有兴趣,可用自行进行尝试。

本文编译自Graphicaldot的“Learn the Basics of Brownie”.

踢马河:RaTiO Fintech合伙人,曾任某券商自营操盘手,十余年海外对冲基金和国内大型投资机构基金经理,资深交易建模专家,币圈大咖。

24小时热点

1U等于多少人民币?U币怎么兑换人民币?

U币(如USDT)是一种基于区块链技术的稳定币,其价值与美元 ...

251060

区块链圈小菜鸡

什么是外汇市场交易?外汇市场与加密货币市场的亲密关系

本文全面介绍了外汇市场的基本知识,包括其定义、交易对象、市场 ...

969

区块链网快讯

一个U是多少钱?一个U币等于多少人民币?

USDT等稳定币的设计初衷就是与美元保持1:1的兑换关系,所 ...

182140

波场区块链浏览器

Solflare钱包完全指南:下载、安装、私钥管理和常见问题解答

本指南详细介绍Solflare钱包的下载、安装、私钥管理以及 ...

37832

区块链网快讯

币圈全球十大交易所排名是什么?

随着加密货币市场的迅速发展,各类交易平台如雨后春笋般涌现。在 ...

27519

波场区块链浏览器

Sol钱包与Sollet钱包详解:Solana用户必备指南

探讨Sol钱包和Sollet钱包的特点、应用场景及对比,帮助 ...

1519

14311113023

使用easyminer挖矿的详细教程

Easyminer是一款比较方便的加密货币挖矿软件,这款软件 ...

171866

波场区块链浏览器

如何在TP钱包中轻松添加Solana链:全面解析及常见问题解答

本文详细介绍了如何在TP钱包中添加Solana链,深入分析T ...

5203

14311113021

TLBC属于什么档次?陀螺币未来走向分析

目前,‌TLBC属于中高档次。TLBC陀螺币作为一种虚拟货币 ...

4714

波场区块链浏览器

深入解析TP钱包跨链教程——HECO转BSC与Solana添加指南

本文详细介绍了如何使用TP钱包进行跨链操作,包括将资产从HE ...

1518

14311113002

热点专题

区块链网是什么

中国区块链价值评价中心 中国区块链价值评价中心于2 ...

5292806

知信链

免费的行情软件app网站在国外有哪些?

区块链看行情的软件,简而言之,就是一类能够实时提供数字货币行 ...

2377018

波场区块链浏览器

雷达币最新进展:2024年主网上线时间及前景预测

近期有传闻称,新加坡的加密货币交易所推出了一款雷达币,这款被 ...

1827508

波场区块链浏览器

2024年最新十大不收费看盘软件排名公布

随着股市交易的普及和技术的发展,投资者对高效、可靠且免费的看 ...

1125849

波场区块链浏览器

元界(Metaverse)

元界(Metaverse)是一个去中心化的公有区块链项目,元 ...

992187

WEEX数字货币

BTC123

BTC123(www.btc123.com)成立于2011年 ...

839225

Kusama 测试网

最全传销名单,请告诉家人朋友,别让他们上当受骗后赔到血本无归

因为互联网的发展,让现代传销具备了更强的隐蔽性,更让社会经验 ...

785641

律动 BlockBeats

中币网zb——中币交易所

ZB.com是一个全球化的数字货币交易所,目前已获得泰国和迪 ...

751221

中币交易所

Bitfinex(香港B网)

Bitfinex交易平台目前仍处于试运营阶段,该平台由iFi ...

722733

Hi元宇宙

DAC币——达芬奇Davinci Coin

达芬奇项目的平台是通过叫作"Dchain"的自身区块链把可以 ...

715222

Mechanism Capital