在本教程中,我们将介绍如何使用 Python 开发 DeFi 项目。去中心化金融 (DeFi) 是区块链和智能合约世界最重要的进步之一,通常被称为“新金融科技”。目前,智能合约开发由 JavaScript 主导,部分原因可能是 JavaScript 是地球上最常用的语言,并且与 Node.js 配合构建全栈应用程序更容易。然而,量化分析师、股票交易员和对冲基金的金融科技世界并非如此。大多数金融科技公司出于各种原因使用 Python:
如此多的数据科学家、学者和金融科技机构使用 Python 是有原因的。DeFi 领域的一些项目,如yearn.finance,分享了这种观点,并使用 Python 和 Solidity 构建了他们的整个 DeFi 平台。正是由于像 web3.py 和 Brownie 这样的库和框架,我们才能看到这些项目变得生动起来。Brownie 是一个类似于 Truffle 的框架(它们都非常“sweet”),它维护您的部署、脚本、测试,并允许您制作端到端的后台。Web3.py和Brownie还提供了“mix”,你可以在其中使用一些样板代码预打开项目。这就是我们今天将使用的Chainlink Brownie mix。现在我们为什么要使用 Chainlink + Python?正如 Python 是金融科技事实上的编程语言一样,Chainlink 是将链下数据提供给 DeFi 智能合约的事实上的预言机解决方案,目前为顶级 DeFi 协议提供了超过 7B 美元的价值。这两种技术的结合为去中心化金融科技领域提供了一个安全而强大的框架。以下是 Chainlink 在 2020 年启用的一些功能的快速浏览。要开始使用 Brownie 和 Python 构建 DeFi 应用程序,您首先需要安装 Python。此时不建议 Python 低于 3.4 版本,因此如果您的版本低于 3.4,请升级。您可以通过运行以下命令查看您的 Python 版本并验证它是否已正确安装:python --version
python3 --version
您还需要安装 Ganache。Ganache 是一个用 Python 编写的一键式区块链应用,可让您轻松启动本地区块链。尽管您必须使用 npm 和 node.js 下载它,但这将是您必须与之交互的唯一 JavaScript 片段。首先,您需要安装 node.js 和 npm。Node.js 随 npm 一起安装。下载后,您可以通过运行以下命令来检查它是否正确完成:npm -v
npm install -g ganache-cli
安装完成后,我们将像安装所有 Python 存储库一样使用 pip 安装 eth-brownie!pip install eth-brownie
pip3 install eth-brownie
如果您在终端中运行 brownie,您就会知道您做对了,您会得到类似于以下内容的输出:Brownie v1.13.0- Python development framework forEthereum
Usage: brownie [...] [options ]
Commands:
init Initialize a new brownie project
bake
Initializefrom a brownie-mix template
pm Installand 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 Managelocal 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 Displaythis message
--version Show version andexit
Type'brownie --help'for specific options and more information about
each command.
此外,您还需要一个 MetaMask 或其他以太坊钱包。请使用 Kovan测试网获得ETH。请确保您的 ETH 钱包中有一些 testnet LINK 和 Kovan ETH。您可以在 LINK faucet 和 ETH Kovan faucet 中找到一些。要开始使用Brownie,,我们可以使用所谓的Brownie mix 来为我们提供样板代码。在这个例子中,我们将部署一个简单的 Chainlink Price Feed 作为了解 Brownie 框架的一种方式。让我们bake chainlink-mix。
brownie bake chainlink-mix
cd chainlink
这将使我们进入一个新项目,其中已经为我们构建了一些默认代码。如果我们运行 ls 我们可以看到文件的布局是什么样的:build
:这是项目跟踪您部署的智能合约和编译的合约的地方contracts
:合同的源代码,通常用 Solidity 或 Vyper 编写interfaces
:您需要使用已部署合同的接口布局。与合约的每次交互都需要一个 ABI 和一个地址。接口是获取合约 ABI 的好方法scripts
:我们创建的脚本来自动化处理我们的合同的过程 测试brownie-config.yaml
:这是我们为 Brownie 了解如何使用我们的智能合约提供所有信息的地方。我们要部署到哪个区块链?有没有我们想要设置的特殊参数?所有这些都在配置文件中设置。
现在可以忽略 requirements.txt
、 README.md
、 LICENSE
和 .gitignore
。当您练习时,您会发现它们的用途。
尽管我们只是安装了 Ganache 来进行本地测试,但我们也希望能够连接到 ETH 主网和测试网,以便我们可以将它们部署在真实的测试网上。为此,我们需要设置 WEB3_INFURA_PROJECT_ID
。您可以从 Infura 站点免费获得一个 Infura ID。您也可以使用其他 web3 提供程序或您自己的节点,但您必须为此做更多的配置。在您的 brownie-config.yaml
文件中,您可以使用主机密钥设置网络,并定义您不想使用 MetaMask 时想要连接的 URL。现在您有了 web3 ID,我们需要将我们的私钥作为环境变量,以便我们可以将我们的帐户与我们的钱包一起使用。如果您使用 MetaMask,请查找导出密钥。使用 MetaMask,您可能需要在私钥的开头添加 0x
。建议在测试和导出密钥时使用与主帐户不同的帐户,以防万一。现在,要使它们成为环境变量,只需在终端中运行以下命令:export PRIVATE_KEY=0x96789…..
export WEB3_INFURA_PROJECT_ID=’dog cat mouse….’
如果你运行 printenv
并在那里看到你的环境变量,你就会知道你做对了。现在我们已经设置好了一切,我们甚至可以继续将智能合约部署到 Kovan 测试网!在我们的脚本文件夹中,我们有一个名为 deploy_price_consumer_v3.py
的脚本。这将部署我们的智能合约,以美元读取以太坊的价格。只需使用 brownie run 即可使用部署脚本:brownie run scripts/price_feed_scripts/deploy_price_consumer_v3.py --network kovan
Running'scripts/price_feed_scripts/deploy_price_consumer_v3.py::main'...
Transaction sent: 0x23d1dfa3937e0cfbab58f8d5ecabe2bfffc28bbe2349527dabe9289e747bac56
Gas price: 20.0 gwei Gas limit: 145600Nonce: 1339
PriceFeed.constructor confirmed - Block: 22721813Gas used: 132364(90.91%)
PriceFeed deployed at: 0x6B2305935DbC77662811ff817cF3Aa54fc585816
如果这工作正常,我们可以去 Kovan Etherscan 并找到我们部署的合约。上面的链接显示了此示例中部署的合约。欢迎添加下方二维码加入社群
一起探讨Python与区块链开发技术
点击下方阅读原文加入社区会员