Python Web3 開發(fā):用 Brownie 部署智能合約
Python是最通用的編程語言之一:從研究人員運行他們的測試模型到開發(fā)人員在繁重的生產環(huán)境中使用它,幾乎在每個可能的技術領域都有使用案例。在今天的指南中,我們將了解Brownie,一個基于Python的工具,用于編寫和部署智能合約。
準備
- 安裝Python3
- 以太坊節(jié)點
- 文本編輯器
- 終端
什么是Brownie?
智能合約開發(fā)主要由基于JavaScript的庫主導,如 web3.js、 ethers.js、 Truffle和 Hardhat。Python是一種通用的、高度使用的語言,也可用于智能合約/web3的開發(fā);web3.py是一個引人注目的Python庫,可滿足web3的需求。Brownie框架是建立在web3.py之上的。
Brownie本意是指長方形小糖果,但我們今天談論的Brownie是一個基于Python的框架,用于開發(fā)和測試智能合約。Brownie同時支持Solidity和Vyper合約,它甚至可以通過pytest提供合約測試。
為了演示用Brownie編寫和部署智能合約的過程,我們將使用Brownie-mixes,這是一個模板項目。具體來說,我們將使用一個token mix,它是ERC-20實現(xiàn)的一個模板。
安裝依賴包
Brownie是建立在python3之上的,所以我們需要安裝它才能與brownie一起工作;讓我們檢查一下我們的系統(tǒng)上是否安裝了python3。要做到這一點,請在你的終端/cmd中輸入以下內容。
python3 -V
該命令會返回所安裝的python3的版本。如果沒有安裝,請從官方python網站下載并安裝。
讓我們在安裝brownie之前建立一個項目目錄,并使該項目目錄成為我們當前的工作目錄。
mkdir brownieDemo
cd brownieDemo
現(xiàn)在你已經在你的系統(tǒng)上安裝了python3,讓我們來使用pip——Python的軟件包管理器來安裝brownie。pip 類似于 npm 對 JavaScript 的作用。在你的終端/cmd中輸入以下內容:
pip3 install eth-brownie
## If the install failS, use the following command for better luck.
sudo pip3 install eth-brownie
要檢查Brownie是否被正確安裝,在你的終端/cmd中輸入brownie,它應該給出以下輸出:
要獲取token mix,可以在你的終端/cmd中輸入以下內容:
brownie bake token
這將在我們的 brownieDemo 目錄中創(chuàng)建一個新的目錄 token/。
文件結構
首先,讓我們cd進入token目錄。
cd token
現(xiàn)在,在你的文本編輯器中打開token目錄。在contracts/文件夾下,你會發(fā)現(xiàn)Token.sol,這是我們的主合約;你可以寫你自己的合約或修改這個。在scripts/文件夾下,你會發(fā)現(xiàn)token.py腳本;這個腳本將被用來部署合約,需要根據合約進行修改。
該合約是一個ERC-20合約。
啟動我們的Ethereum節(jié)點
我們將在Ropsten testnet上部署我們的合約,而不是運行我們自己的節(jié)點。請確保在結賬時選擇Ethereum作為鏈,Ropsten作為網絡。
保存HTTP URL。我們將在下一步中需要它。
網絡和賬戶設置
我們需要在Brownie設置一個QuickNode的免費節(jié)點。為此,在你的終端/cmd中輸入以下內容。
brownie networks add Ethereum ropstenquicknode host=YOUR_QUICKNODE_URL chainid=3
將 YOUR_QUICKNODE_URL替換為我們在上一步驟中得到的 RopstenURL。
在上面的命令中,Ethereum是環(huán)境的名稱,ropstenquicknode是網絡的自定義名稱;你可以給你的自定義網絡起任何名字。
這里我們需要做的下一件事是使用 Brownie創(chuàng)建一個新的錢包。要做到這一點,在你的終端/cmd中輸入以下內容。你會被要求為你的賬戶設置一個密碼。
brownie accounts generate testac
這將生成一個賬戶以及一個記憶性短語,并將其離線保存。testac這個名字是我們賬戶的名稱。你可以選擇任何你想要的名字。
復制賬戶地址,以便我們可以得到一些測試用的ETH,這將是部署我們的合約所需要的。
獲取ETH測試幣
由于我們的合約將被部署在Ropsten測試網,我們需要一些Ropsten測試ETH來支付gas費。前往Ropsten水龍頭,將您的地址粘貼在該區(qū)域,然后點擊 "Send me test Ether"。
部署我們的合約
在部署合約之前,我們需要用以下方法編譯它。
brownie compile
現(xiàn)在在你的文本編輯器中打開scripts/token.py,并做如下修改。
#!/usr/bin/python3
from brownie import Token, accounts
def main():
acct = accounts.load('testac')
return Token.deploy("Test Token", "TST", 18, 1e21, {'from': acct})
第6行。我們添加這一行是為了導入我們先前創(chuàng)建的testac賬戶,并將其存儲在acct變量中。
第7行。在這一行,我們編輯了 'From':部分,以獲取我們的acct變量。
最后,我們將使用腳本(這里是 scripts/token.py)部署我們的合約。
brownie run token.py --network ropstenquicknode
在上面的命令中,ropstenquicknode是我們之前創(chuàng)建的自定義網絡的名稱。提示將要求你提供我們之前在建立賬戶時設置的密碼。運行上述命令后,你必須得到交易哈希值,Brownie將等待交易得到確認。一旦交易被確認,它將返回我們的合約在Ropsten測試網上部署的地址。
你可以在Ropsten etherscan復制粘貼合約地址,查看已部署的合約。
總結
我們學會了如何導入一個Brownie-mix,添加一個自定義網絡,創(chuàng)建一個賬戶,以及編譯和部署一個合約,整個過程中我們都使用了Brownie框架。