用Eth-Brownie开发DeFi应用【Python教程】

去中心化金融(DeFi)是区块链和智能合约世界中最重要的进步之一,通常被称为“新金融科技”。 在这个教程中,我们将逐步介绍如何利用Python的Brownie框架开发一个简单的以太坊DeFi项目来 读取ChainLink预言机提供的以太坊价格。

用自己熟悉的语言学习 以太坊DApp开发Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

1、为什么使用Python开发DeFi应用?

目前,DeFi应用开发主要由JavaScript主导,部分原因是JavaScript是地球上最常用的语言,而且Node.js 带有“ JavaScript无处不在”的思想,可以轻松构建全栈应用程序。但是,对于金融科技界的定量分析师, 股票交易员和对冲基金并非如此。这些金融科技公司中的大多数出于各种原因而使用Python:

  • 出色的开发人员经验
  • 强大的AI和机器学习
  • 捆绑的金融科技软件包
  • 全面的分析工具
  • 生产设置的可靠性

有这么多数据科学家、学者和金融科技机构使用Python是有原因的。DeFi领域中的某些项目,例如yearn.finance, 都具有这种想法,并已使用Python和Solidity构建了整个DeFi平台。因为有了web3.py和Brownie之类的库和框架, 我们才能够看到这些项目的诞生。Brownie是一个类似于Truffle的框架(它们都非常“甜”),可以维护你的部署、 脚本和测试,并允许你进行端到端的后端。

Web3.py和Brownie还提供了“mix”,你可以在其中使用一些样板代码预打开项目。这就是我们今天将使用的Chainlink Brownie mix。

2、Python DeFi开发环境安装

要开始使用Brownie和Python构建DeFi应用,首先需要安装Python。目前不建议低于3.4的Python版本,因此,如果 你使用的版本低于3.4版,请进行升级。可以通过运行以下命令查看你的Python版本并验证其是否正确安装:

1
python --version

或者,如果使用python3:

1
python3 --version

接下来还需要安装Ganache。Ganache是​​用Python编写的开发用的私有区块链,可以轻松启动本地区块链。尽管你必须 通过npm和node.js下载它,但这是本教程中唯一需要与之交互的JavaScript。

首先,你需要安装node.js和npm。Node.js随npm一起安装。下载后,可以通过运行以下命令来检查它是否正确完成:

1
npm -v

然后,就可以通过命令行安装Ganache了:

1
npm install -g ganache-cli

安装完这些后,我们将以pip的方式安装eth-brownie,就像安装其他Python库一样:

1
pip install eth-brownie

或者如果使用pip3:

1
pip3 install eth-brownie

在终端中运行brownie,应该可以看到类似下面这样的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Brownie v1.13.0 - 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
pm Install and manage external packages
compile Compile 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
networks Manage network settings
gui Load the GUI to view opcodes and test coverage
analyze Find security vulnerabilities using the MythX API

Options:

--help -h Display this message
--version Show version and exit

Type 'brownie <command> --help' for specific options and more information about
each command.

另外,你还需要一个MetaMask或其他以太坊钱包。如果你从未使用过ETH钱包,则可以观看此视频 了解如何进行设置。请注意,Chainlink不再支持Ropsten测试网,因此请使用Kovan测试网。

最后,请确保你的ETH钱包中有一些Kovan测试网的LINK代币和ETH。你可以在LINK FaucetKovan Faucet得到这些免费的测试币。

3、创建Brownie DeFi项目

要开始使用Browbie,我们可以使用Brownie Mix为我们提供样板代码。在此示例中,我们将部署一个简单的 Chainlink Price Feed,以了解Brownie框架。让我们导入chainlink-mix:

1
2
brownie bake chainlink-mix
cd chainlink

这将使我们进入一个已经为我们构建了一些默认代码的新项目。如果运行ls,我们可以看到文件的布局:

  • build:这是项目跟踪已部署的智能合约和已编译合约的地方
  • contracts:合约源代码,通常以Solidity或Vyper编写
  • interfaces:处理已部署合约所需的接口布局。每次与合约的交互都需要一个ABI和一个地址。接口是获取合约的ABI的好方法
  • scripts:我们创建的脚本,用于自动执行合约流程
  • tests:测试脚本
  • brownie-config.yaml:在这里,我们可以获取Brownie的所有信息,以了解如何使用我们的智能合约。我们想部署到什么区块链? 我们要设置任何特殊参数吗?所有这些都在配置文件中设置。

requirements.txt,README.md,LICENSE,和.gitignore可现在忽略。我们将在练习时找出它们的用途。

4、设置Brownie DeFi项目的环境变量

虽然我们只是安装了Ganache进行本地测试,也希望能够连接到ETH主网和测试网,以便我们可以将它们部署在真实的 测试网上。为此,我们需要设置**WEB3_INFURA_PROJECT_ID. 你可以从Infura网站免费获得Infura ID 。当然也可以使用 其他web3提供程序或自己的节点,但是别忘了需要进行必要的配置。

在brownie-config.yaml文件中,您可以使用host键设置网络,并定义不想使用MetaMask时要连接的URL。

现在有了web3 ID,我们需要将私钥作为环境变量使用,以便我们可以在钱包中使用我们的帐户。如果你使用的是MetaMask, 可以通过export key功能导出私钥。使用MetaMask,别忘了添加0x到私钥的开头。为了以防万一,建议在测试和导出密钥时 使用与主帐户不同的帐户。

要设置环境变量,只需在终端中运行以下命令:

1
2
export PRIVATE_KEY=0x96789…..
export WEB3_INFURA_PROJECT_ID=’dog cat mouse….’

运行printenv来检查环境变量是否正确。

5、部署DeFi项目的智能合约

现在已经完成了所有设置,我们甚至可以继续将智能合约部署到Kovan测试网!

在我们的scripts文件夹中,有一个名为的脚本deploy_price_consumer_v3.py。这将部署我们的智能合约,该合约以 将读取以美元计量的以太币价格。

如果你想更进一步了解该合约的功能以及如何进行部署,请随时查看相关的Chainlink教程

只需使用brownie run部署脚本即可:

1
brownie run scripts/price_feed_scripts/deploy_price_consumer_v3.py --network kovan

你会看到以下内容:

1
2
3
4
5
Running 'scripts/price_feed_scripts/deploy_price_consumer_v3.py::main'...
Transaction sent: 0x23d1dfa3937e0cfbab58f8d5ecabe2bfffc28bbe2349527dabe9289e747bac56
Gas price: 20.0 gwei Gas limit: 145600 Nonce: 1339
PriceFeed.constructor confirmed - Block: 22721813 Gas used: 132364 (90.91%)
PriceFeed deployed at: 0x6B2305935DbC77662811ff817cF3Aa54fc585816

如果可以正常工作,我们可以前往Kovan Etherscan找到我们部署的合约。上面的链接显示了此示例中部署的合约的地址。

6、用Python调用智能合约的方法

现在我们已经部署了智能合约,我们可以从刚刚部署的合约中读取以太坊的价格。我们将使用另一个 预置的脚本:

1
brownie run scripts/price_feed_scripts/read_price_feed.py --network kovan

我们将得到如下输出:

1
2
3
4
5
Brownie v1.12.2 - Python development framework for Ethereum
ChainlinkProject is the active project.
Running 'scripts/price_feed_scripts/read_price_feed.py::main'...
Reading data from 0x5A….
122322000000

其中122322000000是ETH当前的美元价格!Solidity无法理解小数,因此我们知道Chainlink Price Feed具有8位小数, 因此价格为$1223.22。

我们成功地使用Python和Brownie部署了你的第一个智能合约!

7、智能合约的端到端测试

这也是如何测试智能合约的一个很好的例子。我们使用模拟对象(Mock Objects)甚至可以在本地进行测试!

只需运行:

1
brownie test

上述测试将在本地Ganache实例上运行!

还可以使用以下内容在测试网上进行测试:

1
brownie test --network kovan

这些测试可以判断当前是否在测试网上工作。如果是在本地工作,它将部署oracle预言机地模拟对象,以便我们 可以进行测试。

8、如何进一步深入

既然我们已经知道如何使用Python部署智能合约,就可以开始在此框架上进行构建以做更多有趣的事情。Python 具有强大的软件包,例如Numpy,Scikit,Pandas和TensorFlow,可以进行量化工作、机器学习等。最终将这些 技术结合在一起是在金融科技新时代成功的秘诀:去中心化金融。


原文链接:Develop a DeFi Project Using Python

汇智网翻译整理,转载请标明出处