使用Python开发DeFi项目

目前,智能合约的开发由JavaScript语言主导,部分原因在于JavaScript是地球上最常用的语言,而且因为Node.js带来的“JavaScript无处不在”的思想,使得构建全栈应用程序变得更加容易。但是,对金融科技界中的定量分析师,股票交易员和对冲基金来说,情况则有所不同。大多数金融科技公司中出于各种原因而选择使用Python

在本文教程中,我们将详细介绍如何 使用Python开发DeFi项目 。去中心化金融(DeFi)是区块链和智能合约世界里最重要的进步之一,且常常被称作“新金融科技”。目前,智能合约的开发由JavaScript语言主导,部分原因在于JavaScript是地球上最常用的语言,而且因为Node.js带来的“JavaScript无处不在”的思想,使得构建全栈应用程序变得更加容易。但是,对金融科技界中的定量分析师,股票交易员和对冲基金来说,情况则有所不同。大多数金融科技公司中出于各种原因而选择使用Python:

  • 出色的开发者体验
  • 强大的AI和机器学习支持
  • 配套的金融科技软件工具包
  • 全面的分析工具
  • 生产环境中的可靠性

使用Python开发DeFi项目

来源:eFinancialCareers

为什么有众多数据科学家,学者和金融科技机构使用Python是有一定原因的。DeFi领域中的某些项目,如yearn.finance,也认可这种想法,并已经使用Python和Solidity构建了他们的整个DeFi平台。因为有了web3.py和Brownie之类的库和框架,我们才能够有机会看到这些项目的诞生。Brownie是一个类似Truffle的框架,能够支持项目部署,编写脚本,测试等,且能够进行端到端的开发。

Web3.py和Brownie也能“混合”使用,你可以预先打开一个项目并在其中使用一些样板代码。这就是我们今天将要使用的Chainlink Brownie mix。

现在思考一下我们为什么要使用Chainlink Python?正如Python是金融科技领域中的首选编程语言,Chainlink事实上也是将链下数据带到DeFi智能合约中的首选预言机解决方案,当前正守护着超过750亿美金的顶级DeFi协议的价值。这两种技术的结合为安全去中心化金融科技领域提供了强大的框架支撑。

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

1 python --version

或者,如果用的是Python3:

1 python3 --version

你还需要安装Ganache。Ganache是用Python编写的一键式区块链,它可让你很容易启动一个本地区块链。但你必须通过npm和node.js来下载它,这将是唯一需要与之交互的JavaScript相关的内容。

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

1 npm --version2 node --version

然后你可以通过命令行安装Ganache。

1 npm install -g ganache-cli

安装完这些后,我们来安装eth-brownie。推荐使用pipx而不是pip,这样我们就可以在它自己的环境中安装eth-brownie。

首先安装pipx:

1 python3 -m pip install --user pipx2 python3 -m pipx ensurepath

然后关闭并重启终端。如果使用的是VSCode,点击那个看起来像垃圾桶的图标。现在pipx应该成功安装了,可以通过pipx –version检查。然后可以安装eth-brownie。

如果你想在没有虚拟环境的情况下安装,可以使用pip或pip3:“

1 pip3 install eth-brownie

如果你能在终端执行brownie命令,就表示安装成功,并且得到的输出类似于:

1 Brownie v1.17.0 - Python development framework for Ethereum 2 Usage: brownie[...] [options] 3 Commands: 4 init Initialize a new brownie project 5 bake Initialize from a brownie-mix template 6 pm Install and manage external packages 7 compile Compile the contract source files 8 console Load the console 9 test Run test cases in the tests/ folder 10 run Run a script in the scripts/ folder 11 accounts Manage local accounts 12 networks Manage network settings 13 gui Load the GUI to view opcodes and test coverage 14 analyze Find security vulnerabilities using the MythX API 15 Options: 16 --help -h Display this message 17 --version Show version and exit18 Type 'brownie--help' for specific options and more information about19 each command.

另外,你还需要一个MetaMask或其他以太坊钱包。如果你以前从未使用过ETH钱包,则可以观看下面的视频辅助设置。需要注意的是,这个视频也展示了在Ropsten网络上获取ETH测试代币,但Chainlink已经不再支持了。如果你想按照视频操作,请使用Kovan测试网络。

最后,请确保你的ETH钱包中有一些测试网LINK代币和Kovan测试网ETH代币。你可以在LINK水龙头和ETH Kovan水龙头中获取一些。

开启一个Chainlink项目

要开始使用Brownie,我们可以使用Brownie mix为我们提供样板代码。在本文的示例中,我们将部署一个简单的Chainlink Price Feed,来了解Brownie框架。现在我们就开始创作chainlink-mix项目吧。

1 brownie bake chainlink-mix2 cd chainlink

我们会进入到一个包含一些默认代码的新项目。如果运行ls命令,我们可以看到文件的布局如下:

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

requirements.txt , README.md , LICENSE , 以及 .gitignore 等文件现在可以忽略。你将在练习过程中了解它们的用途。

设置环境变量

虽然我们刚刚安装好了Ganache进行本地测试,我们仍希望能够连接到以太坊主网和测试网,这样我们就可以将合约部署在真实的测试网上。为此,我们需要设置WEB3_INFURA_PROJECT_ID字段。你可以从Infura网站免费获得一个Infura ID,也可以使用其他web3 providers或者自己的节点,但是你需要做更多配置。

在brownie-config.yaml文件中,你可以设定带有host字段的网络配置,如果不想使用MetaMask,还可以定义要连接的URL。

现在有了web3 ID,我们需要将私钥作为环境变量来使用,这样我们可以在钱包中使用我们的帐户。如果你使用的是MetaMask,请找到 export key选项(以导出私钥)。使用MetaMask的话,你可能必须在私钥的开头添加0x。为了以防万一,建议在测试和导出密钥时使用与主帐户不同的帐户。

重要提示:请不要将你的私钥发送到 GitHub或任何公共场所!如果有人获得了你的私钥,他们将可以访问你帐户中的所有资金!我们强烈建议你使用与持有资金的账户不同的账户进行测试。

现在我们需要让它们成为环境变量。我们将使用一种简单的方法来设置环境变量,创建一个.env文件,并添加以下内容:

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

PRIVATE_KEY是MetaMask钱包中的私钥,WEB3_INFURA_PROJECT_ID是来自Infura的项目ID。然后,创建一个brownie-config.yaml文件(如果文件已存在,给它添加下面的内容)并添加以下行:

1 dotenv: .env

现在我们就可以部署到测试网和本地网络了!

部署你的智能合约

现在我们已经完成了所有设置,我们将进一步把智能合约部署到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 Running 'scripts/price_feed_scripts/deploy_price_consumer_v3.py::main'...2 Transaction sent: 0x23d1dfa3937e0cfbab58f8d5ecabe2bfffc28bbe2349527dabe9289e747bac56Gas price: 20.0 gwei 3 Gas limit: 145600 Nonce: 13394 PriceFeed.constructor confirmed - Block: 22721813 Gas used: 132364 (90.91%)5 PriceFeed deployed at: 0x6B2305935DbC77662811ff817cF3Aa54fc585816

如果脚本工作正常,我们可以到Kovan区块浏览器上查看我们部署的合约。上面的链接显示了此示例中部署的合约。

读取你的智能合约

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

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

我们将得到如下输出:

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

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

至此你就完成了使用Python和Brownie部署你的第一个智能合约!

测试你的智能合约

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

只需运行:

1 brownie test

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

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

1 brownie test --network kovan

这些测试具有一些可以知晓你是否正在使用测试网的功能。如果你在本地工作,它将部署预言机代码的虚拟对象或“模拟对象”,因此我们可以通过它们进行测试。

更进一步

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

Chainlink是一个灵活的框架,用于将外部金融数据和系统引入到链上,并无缝集成这些与以数据为中心的软件包,如Numpy和Pandas。

相关新闻

联系我们
联系我们
在线咨询
分享本页
返回顶部