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