Python是最通用的编程语言之一:从研究人员运行他们的测试模型到开发人员在繁重的生产环境中使用它,几乎在每个可能的技术领域都有使用案例。在今天的指南中,我们将了解Brownie,一个基于Python的工具,用于编写和部署智能合约。
准备
- 安装Python3
- 以太坊节点
- 文本编辑器
- 终端
什么是Brownie?
智能合约开发主要由基于JavaScript的库主导,如 web3.js、 ethers.js、 Truffle和 Hardhat。Python是一种通用的、高度使用的语言,也可用于智能合约/web3的开发;web3.py是一个引人注目的Python库,可满足web3的需求。Brownie框架是建立在web3.py之上的。
Brownie本意是指长方形小糖果,但我们今天谈论的Brownie是一个基于Python的框架,用于开发和测试智能合约。Brownie同时支持Solidity和Vyper合约,它甚至可以通过pytest提供合约测试。
为了演示用Brownie编写和部署智能合约的过程,我们将使用Brownie-mixes,这是一个模板项目。具体来说,我们将使用一个token mix,它是ERC-20实现的一个模板。
安装依赖包
Brownie是建立在python3之上的,所以我们需要安装它才能与brownie一起工作;让我们检查一下我们的系统上是否安装了python3。要做到这一点,请在你的终端/cmd中输入以下内容。
python3 -V
- 1.
该命令会返回所安装的python3的版本。如果没有安装,请从官方python网站下载并安装。
让我们在安装brownie之前建立一个项目目录,并使该项目目录成为我们当前的工作目录。
mkdir brownieDemo
cd brownieDemo
- 1.
- 2.
现在你已经在你的系统上安装了python3,让我们来使用pip——Python的软件包管理器来安装brownie。pip 类似于 npm 对 JavaScript 的作用。在你的终端/cmd中输入以下内容:
pip3 install eth-brownie
## If the install failS, use the following command for better luck.
sudo pip3 install eth-brownie
- 1.
- 2.
- 3.
要检查Brownie是否被正确安装,在你的终端/cmd中输入brownie,它应该给出以下输出:
要获取token mix,可以在你的终端/cmd中输入以下内容:
brownie bake token
- 1.
这将在我们的 brownieDemo 目录中创建一个新的目录 token/。
文件结构
首先,让我们cd进入token目录。
cd token
- 1.
现在,在你的文本编辑器中打开token目录。在contracts/文件夹下,你会发现Token.sol,这是我们的主合约;你可以写你自己的合约或修改这个。在scripts/文件夹下,你会发现token.py脚本;这个脚本将被用来部署合约,需要根据合约进行修改。
该合约是一个ERC-20合约。
启动我们的Ethereum节点
我们将在Ropsten testnet上部署我们的合约,而不是运行我们自己的节点。请确保在结账时选择Ethereum作为链,Ropsten作为网络。
保存HTTP URL。我们将在下一步中需要它。
网络和账户设置
我们需要在Brownie设置一个QuickNode的免费节点。为此,在你的终端/cmd中输入以下内容。
brownie networks add Ethereum ropstenquicknode host=YOUR_QUICKNODE_URL chainid=3
- 1.
将 YOUR_QUICKNODE_URL替换为我们在上一步骤中得到的 RopstenURL。
在上面的命令中,Ethereum是环境的名称,ropstenquicknode是网络的自定义名称;你可以给你的自定义网络起任何名字。
这里我们需要做的下一件事是使用 Brownie创建一个新的钱包。要做到这一点,在你的终端/cmd中输入以下内容。你会被要求为你的账户设置一个密码。
brownie accounts generate testac
- 1.
这将生成一个账户以及一个记忆性短语,并将其离线保存。testac这个名字是我们账户的名称。你可以选择任何你想要的名字。
复制账户地址,以便我们可以得到一些测试用的ETH,这将是部署我们的合约所需要的。
获取ETH测试币
由于我们的合约将被部署在Ropsten测试网,我们需要一些Ropsten测试ETH来支付gas费。前往Ropsten水龙头,将您的地址粘贴在该区域,然后点击 "Send me test Ether"。
部署我们的合约
在部署合约之前,我们需要用以下方法编译它。
brownie compile
- 1.
现在在你的文本编辑器中打开scripts/token.py,并做如下修改。
#!/usr/bin/python3
from brownie import Token, accounts
def main():
acct = accounts.load('testac')
return Token.deploy("Test Token", "TST", 18, 1e21, {'from': acct})
- 1.
- 2.
- 3.
- 4.
- 5.
第6行。我们添加这一行是为了导入我们先前创建的testac账户,并将其存储在acct变量中。
第7行。在这一行,我们编辑了 'From':部分,以获取我们的acct变量。
最后,我们将使用脚本(这里是 scripts/token.py)部署我们的合约。
brownie run token.py --network ropstenquicknode
- 1.
在上面的命令中,ropstenquicknode是我们之前创建的自定义网络的名称。提示将要求你提供我们之前在建立账户时设置的密码。运行上述命令后,你必须得到交易哈希值,Brownie将等待交易得到确认。一旦交易被确认,它将返回我们的合约在Ropsten测试网上部署的地址。
你可以在Ropsten etherscan复制粘贴合约地址,查看已部署的合约。
总结
我们学会了如何导入一个Brownie-mix,添加一个自定义网络,创建一个账户,以及编译和部署一个合约,整个过程中我们都使用了Brownie框架。