用 Python 開發(fā) DeFi 去中心化應(yīng)用(上)
Python中文社區(qū) (ID:python-china)
在本教程中,我們將介紹如何使用 Python 開發(fā) DeFi 項(xiàng)目。去中心化金融 (DeFi) 是區(qū)塊鏈和智能合約世界最重要的進(jìn)步之一,通常被稱為“新金融科技”。目前,智能合約開發(fā)由 JavaScript 主導(dǎo),部分原因可能是 JavaScript 是地球上最常用的語言,并且與 Node.js 配合構(gòu)建全棧應(yīng)用程序更容易。然而,量化分析師、股票交易員和對沖基金的金融科技世界并非如此。大多數(shù)金融科技公司出于各種原因使用 Python:
- 更高效的開發(fā)體驗(yàn)
- 強(qiáng)大的人工智能和機(jī)器學(xué)習(xí)
- 捆綁的金融科技包
- 綜合分析工具
- 生產(chǎn)環(huán)境中的可靠性
如此多的數(shù)據(jù)科學(xué)家、學(xué)者和金融科技機(jī)構(gòu)使用 Python 是有原因的。DeFi 領(lǐng)域的一些項(xiàng)目,如yearn.finance,分享了這種觀點(diǎn),并使用 Python 和 Solidity 構(gòu)建了他們的整個(gè) DeFi 平臺。正是由于像 web3.py 和 Brownie 這樣的庫和框架,我們才能看到這些項(xiàng)目變得生動(dòng)起來。Brownie 是一個(gè)類似于 Truffle 的框架(它們都非常“sweet”),它維護(hù)您的部署、腳本、測試,并允許您制作端到端的后臺。
Web3.py和Brownie還提供了“mix”,你可以在其中使用一些樣板代碼預(yù)打開項(xiàng)目。這就是我們今天將使用的Chainlink Brownie mix。
現(xiàn)在我們?yōu)槭裁匆褂?Chainlink + Python?正如 Python 是金融科技事實(shí)上的編程語言一樣,Chainlink 是將鏈下數(shù)據(jù)提供給 DeFi 智能合約的事實(shí)上的預(yù)言機(jī)解決方案,目前為頂級 DeFi 協(xié)議提供了超過 7B 美元的價(jià)值。這兩種技術(shù)的結(jié)合為去中心化金融科技領(lǐng)域提供了一個(gè)安全而強(qiáng)大的框架。
以下是 Chainlink 在 2020 年啟用的一些功能的快速瀏覽。
要開始使用 Brownie 和 Python 構(gòu)建 DeFi 應(yīng)用程序,您首先需要安裝 Python。此時(shí)不建議 Python 低于 3.4 版本,因此如果您的版本低于 3.4,請升級。您可以通過運(yùn)行以下命令查看您的 Python 版本并驗(yàn)證它是否已正確安裝:
- python --version
或者,如果使用 python3:
- python3 --version
您還需要安裝 Ganache。Ganache 是一個(gè)用 Python 編寫的一鍵式區(qū)塊鏈應(yīng)用,可讓您輕松啟動(dòng)本地區(qū)塊鏈。盡管您必須使用 npm 和 node.js 下載它,但這將是您必須與之交互的唯一 JavaScript 片段。
首先,您需要安裝 node.js 和 npm。Node.js 隨 npm 一起安裝。下載后,您可以通過運(yùn)行以下命令來檢查它是否正確完成:
- npm -v
然后,您可以通過命令行安裝 Ganache。
- npm install -g ganache-cli
安裝完成后,我們將像安裝所有 Python 存儲(chǔ)庫一樣使用 pip 安裝 eth-brownie!
- pip install eth-brownie
或者如果使用 pip3:
- pip3 install eth-brownie
如果您在終端中運(yùn)行 brownie,您就會(huì)知道您做對了,您會(huì)得到類似于以下內(nèi)容的輸出:
- Brownie v1.13.0- Python development framework forEthereum
- Usage: brownie <command> [<args>...] [options <args>]
- 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 <command> --help'for specific options and more information about
- each command.
此外,您還需要一個(gè) MetaMask 或其他以太坊錢包。請使用 Kovan測試網(wǎng)獲得ETH。請確保您的 ETH 錢包中有一些 testnet LINK 和 Kovan ETH。您可以在 LINK faucet 和 ETH Kovan faucet 中找到一些。
啟動(dòng) Chainlink 項(xiàng)目
要開始使用Brownie,,我們可以使用所謂的Brownie mix 來為我們提供樣板代碼。在這個(gè)例子中,我們將部署一個(gè)簡單的 Chainlink Price Feed 作為了解 Brownie 框架的一種方式。讓我們bake chainlink-mix。
- brownie bake chainlink-mix
- cd chainlink
這將使我們進(jìn)入一個(gè)新項(xiàng)目,其中已經(jīng)為我們構(gòu)建了一些默認(rèn)代碼。如果我們運(yùn)行 ls 我們可以看到文件的布局是什么樣的:
- build :這是項(xiàng)目跟蹤您部署的智能合約和編譯的合約的地方
- contracts:合同的源代碼,通常用 Solidity 或 Vyper 編寫
- interfaces :您需要使用已部署合同的接口布局。與合約的每次交互都需要一個(gè) ABI 和一個(gè)地址。接口是獲取合約 ABI 的好方法
- scripts:我們創(chuàng)建的腳本來自動(dòng)化處理我們的合同的過程 測試
- tests:測試
- brownie-config.yaml :這是我們?yōu)?Brownie 了解如何使用我們的智能合約提供所有信息的地方。我們要部署到哪個(gè)區(qū)塊鏈?有沒有我們想要設(shè)置的特殊參數(shù)?所有這些都在配置文件中設(shè)置。
現(xiàn)在可以忽略 requirements.txt 、 README.md 、 LICENSE 和 .gitignore。當(dāng)您練習(xí)時(shí),您會(huì)發(fā)現(xiàn)它們的用途。
設(shè)置環(huán)境變量
盡管我們只是安裝了 Ganache 來進(jìn)行本地測試,但我們也希望能夠連接到 ETH 主網(wǎng)和測試網(wǎng),以便我們可以將它們部署在真實(shí)的測試網(wǎng)上。為此,我們需要設(shè)置 WEB3_INFURA_PROJECT_ID。您可以從 Infura 站點(diǎn)免費(fèi)獲得一個(gè) Infura ID。您也可以使用其他 web3 提供程序或您自己的節(jié)點(diǎn),但您必須為此做更多的配置。
在您的 brownie-config.yaml 文件中,您可以使用主機(jī)密鑰設(shè)置網(wǎng)絡(luò),并定義您不想使用 MetaMask 時(shí)想要連接的 URL。
現(xiàn)在您有了 web3 ID,我們需要將我們的私鑰作為環(huán)境變量,以便我們可以將我們的帳戶與我們的錢包一起使用。如果您使用 MetaMask,請查找導(dǎo)出密鑰。使用 MetaMask,您可能需要在私鑰的開頭添加 0x。建議在測試和導(dǎo)出密鑰時(shí)使用與主帳戶不同的帳戶,以防萬一。
現(xiàn)在,要使它們成為環(huán)境變量,只需在終端中運(yùn)行以下命令:
- export PRIVATE_KEY=0x96789…..
- export WEB3_INFURA_PROJECT_ID=’dog cat mouse….’
如果你運(yùn)行 printenv 并在那里看到你的環(huán)境變量,你就會(huì)知道你做對了。
部署您的智能合約
現(xiàn)在我們已經(jīng)設(shè)置好了一切,我們甚至可以繼續(xù)將智能合約部署到 Kovan 測試網(wǎng)!
在我們的腳本文件夾中,我們有一個(gè)名為 deploy_price_consumer_v3.py的腳本。這將部署我們的智能合約,以美元讀取以太坊的價(jià)格。
只需使用 brownie run 即可使用部署腳本:
- brownie run scripts/price_feed_scripts/deploy_price_consumer_v3.py --network kovan
你會(huì)看到這樣的東西:
- 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 并找到我們部署的合約。上面的鏈接顯示了此示例中部署的合約。