用 Python 開發 DeFi 去中心化應用(上)
Python中文社區 (ID:python-china)
在本教程中,我們將介紹如何使用 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:
- python3 --version
您還需要安裝 Ganache。Ganache 是一個用 Python 編寫的一鍵式區塊鏈應用,可讓您輕松啟動本地區塊鏈。盡管您必須使用 npm 和 node.js 下載它,但這將是您必須與之交互的唯一 JavaScript 片段。
首先,您需要安裝 node.js 和 npm。Node.js 隨 npm 一起安裝。下載后,您可以通過運行以下命令來檢查它是否正確完成:
- npm -v
然后,您可以通過命令行安裝 Ganache。
- npm install -g ganache-cli
安裝完成后,我們將像安裝所有 Python 存儲庫一樣使用 pip 安裝 eth-brownie!
- pip install eth-brownie
或者如果使用 pip3:
- pip3 install eth-brownie
如果您在終端中運行 brownie,您就會知道您做對了,您會得到類似于以下內容的輸出:
- 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.
此外,您還需要一個 MetaMask 或其他以太坊錢包。請使用 Kovan測試網獲得ETH。請確保您的 ETH 錢包中有一些 testnet LINK 和 Kovan ETH。您可以在 LINK faucet 和 ETH Kovan faucet 中找到一些。
啟動 Chainlink 項目
要開始使用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:我們創建的腳本來自動化處理我們的合同的過程 測試
- tests:測試
- 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 并找到我們部署的合約。上面的鏈接顯示了此示例中部署的合約。