Brownie Web3 – 使用 Python 开发以太坊智能合约

分享有关 Brownie Web3 的基础知识,并扩展如何使用它来开发部署在区块链上的以太坊智能合约

对于 Web3.0 智能合约开发人员来说,Brownies 让您更轻松地开发、导入、测试和调试部署在以太坊区块链网络上的智能合约。此外,它还可以帮助您设置交易、方法和变量来与以太坊交互。

接下来,我将介绍有关 Brownie 的基础知识,并扩展如何使用 Brownie 开发以太坊智能合约并将其部署到区块链网络上。

Brownie Web3.0 – 开发与加密货币网络交互的以太坊智能合约的要素

Brownie、Python、Infura、os、Ganache、MetaMask、ETH Goerli 测试网络

表中的内容

什么是布朗尼

Brownie 是一个友好且易于使用的框架,用于开发以太坊智能合约。从其功能范围来看,其主要价值有3个方面:

部署区块链网络所需的智能合约

创建不同类型和用途的智能合约,并将其部署到以太坊等区块链上。您可以创建并启动与区块链交互中重要的任何事务元素。

与智能合约交互

Brownie框架和文件夹路径方便您编写脚本或使用Brownie控制台与部署在主网上的智能合约进行交互。或者你可以在本地区块链环境中实现UAT,例如:Ganache

测试正在开发的智能合约

Brownie提供了一个快速、友好、易用的智能合约开发测试环境以及实现测试的相关功能。例如,您可以在事务恢复时获取详细信息,以帮助您快速查明问题。

激活 Brownie 并安装 Ganache 本地区块链安装

Step1:布朗尼安装

以MacOS环境为例。首先,我们需要在终端中输入如下代码来为 Brownie 安装可视化环境。

Python3 -m pip install –user pipx

Python3 -m pipx ensure path

安装完成后,请务必关闭终端以避免冲突或激活视觉环境。

然后,请输入如下代码行来安装Brownie

Pips install eth-brownie

要检查您是否已在 Mac 上安装它,我们可以输入检查器命令,这与任何其他包检查相同。

步骤 2:创建第一个 Brownie 脚本文件夹和项目

我假设您已经在编码软件中创建了一个新文件夹,例如:Visual Studio Code。现在我们可以尝试创建一个新的布朗尼项目。启动代码如下:

Brownie init

启动完成以及反应安装后,Brownie 文件夹默认会出现一个文件夹列表。它们是具有不同功能的文件夹,如下所示:

  • 建造
  • 合约
  • 接口
  • 报告
  • 脚本
  • 测试

步骤 3:安装本地 Ganache CLI

Brownie 默认使用终端中的 Ganache CLI,这是一个本地区块链可视化环境。在我们之前的文章中,脚本直接连接到 Web UI 版本。这次需要我们安装 Ganache CLI。

  • 下载node.js (这里是macOS版本)并将其安装到设备上
  • 命令: npm install –global yarn 。我们需要安装yarn,它是一个包管理器,实际上允许我们下载像Ganache CLI 一样的片段和包。如果您的设备可能响应您没有安装纱线的权限,请务必添加sudo
  • 使用以下命令安装 Ganache CLI: yarn global add ganache-cli 。再次强调,如果您的设备再次拒绝,请务必添加sudo

创建第一个智能合约并将其部署到 Ganache CLI 上

添加智能合约

在 Brownie 的合约文件夹中,用于保存智能合约文件,例如easy2digitalStore.sol 。添加该文件夹下的文件后,输入这行代码即可:

Brownie compile

编译给定的 sol 文件后,您可以看到以 JSON 格式保存在合约文件夹中的 build 文件夹下的所有编译信息。

部署在 ETH 区块链上

首先,我们需要在 script 文件夹下创建一个新的 Python 文件

Deployment.py

在脚本中,我们需要使用一个布朗尼方法,即accounts() ,它用于与本地可视化区块链Ganache CLI 进行交互。以下是代码示例:

Import brownie import accounts

def single_contract():

localGanacheAccount = accounts[0]

print(localGanacheAccount)

Def main():

single_contracct()

我们可以使用brownie run来激活终端中的python脚本。

添加新帐户并连接到真实测试网络

我们可以创建一个新帐户,而不是使用 Ganache CLI 帐户。命令和代码如下:

在终端中:

Brownie accounts new easy2digitalAccount-account

然后,您需要为这个新帐户添加私钥。我们可以复制 MetaMask 私钥并将其粘贴到此处。

最后但并非最不重要的一点是,布朗尼会使用密码加密您的私钥。因此,只需输入您喜欢的密码即可。

如果您尝试使用 load 方法运行来查找您刚才创建的新帐户,结果将如下所示:

连接到真实的测试网络

Brownie 提供了已声明的网络列表。如果您想检查,只需在终端中输入命令 Brownie Networks List 即可。

在上一篇文章中,我们使用 Infura 作为连接以太坊的第三方平台。所以在这里我们也将使用 INFURA。

首先,我们需要 INFURA 的 HTTP 提供程序协议。在 Brownie 中,我们有一种与 Infura 连接的方法。请将其添加到 .env 中

WEB3_INFURA_PROJECT_ID = your infura http endpoint unique ID.

然后,现在我们需要从 MetaMask goerli 测试网络获取帐户,而不是从 Ganache CLI 获取帐户。

添加您要添加​​的私钥,例如 MetaMask 钱包。请务必在 MetaMask 私钥前添加 0x。这里我们需要做三件事

  • 创建一个 get_account 函数,用于获取 MetaMask 钱包私钥信息
  • 在主目录文件夹中添加brownie-config.yaml文件以与 .env 连接,其中包含私钥和 INFURA 端点唯一 ID
  • 在 Ganache CLI 测试脚本中将 account[0] 替换为 get_account()。

最后,我们需要告诉 Infura python 脚本将使用哪个 ETH 测试网络。和我们在上一篇文章中使用的goerili一样,这里使用同样的方式,在终端中输入命令

Brownie run scripts/deployment.py –network goerli

连接后,您可以转到构建文件夹下的部署部分,会生成一个地图 JSON 文件。

测试和调试您的智能合约

Brownie的强大功能之一一定是测试环境。智能合约开发人员可以在上线之前实施 UAT 并修复错误。

让我们创建一个脚本,就像我们在测试文件夹中创建的deployment.py 脚本一样。

首先,Brownie 非常方便,因为它可以让开发者直接将智能合约导入到 python 脚本中。

这是代码示例:

From brownie import easy2idigitalContract, accounts

所以我们可以直接使用合约名称和deploy()方法将账户部署到区块链上。例如:

Def test_deployment():

##Arrange a specific smart contract address

walletAccount = accounts[0]

##Deploy the contract to the account

Single_contract = easy2idigitalContract.deploy({“from”: walletAccount})

Starting_value = single_contract.retrieve()

其次,由于这是一个测试,我们需要检查检索到的值是否等于预期值。所以这里是代码示例如下:

Expected == 0

Assert starting_value == expected

然后,请在终端中输入命令,查看值是否相等。如果结果通过,则会以绿色显示“通过”。

Brownie test

Brownie 控制台,用于任何临时功能测试和开发

对于脚本测试,如果您想创建一个 shell 或控制台来测试和运行脚本。您可以尝试输入如下代码,可以直接更新脚本,并打印出来立即得到结果。

Brownie test –pdb

Brownie Web3.0 的完整 Python 脚本 – 使用 Brownie 和 Python 开发智能合约并激活与 ETH 的交互

如果您对 Web3.0 教程 3 – Web3.0 中的 Brownie – 使用 Brownie 和 Python 开发与加密货币网络交互的以太坊智能合约感兴趣,请添加消息“Web3.0教程3”来订阅我们的新闻通讯。我们会立即将脚本发送到您的邮箱。

我希望您喜欢阅读 Web3.0 教程 3 – Web3.0 中的 Brownie – 使用 Brownie 和 Python 开发以太坊智能合约与加密货币网络交互如果您喜欢,请通过执行下面列出的操作之一来支持我们,因为它总是有帮助的我们的频道。