溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Python的開發(fā)框架Brownie部署以太坊智能合約

發(fā)布時間:2021-05-31 10:05:31 來源:億速云 閱讀:247 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹怎么使用Python的開發(fā)框架Brownie部署以太坊智能合約,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

介紹

我希望可以在任何開發(fā)場景都盡量用Python。在區(qū)塊鏈開發(fā)中,常用的是以太坊虛擬機智能合約語言Solidity,它具有許多不錯的功能,并且仍然可以使用 Python 進行部署。剛開始使用Solidity時,我使用了Remix(https://remix.ethereum.org/),這是一個強大的Web IDE,可讓您進行智能合約可視化。Remix很棒,我現(xiàn)在仍然使用它,但是在單個IDE之外可以實現(xiàn)很多其他功能。后來我開始學習Truffle(https://www.trufflesuite.com/)和HardHat(https://hardhat.org/guides/mainnet-forking.html),它們是用于部署智能合約的Node.js框架。
這些是到目前為止我所見過的主要框架,這些框架都不錯,但是我更喜歡Python。所以當我發(fā)現(xiàn)Brownie 和web3.py:一個用于部署智能合約的Python框架和一個用于區(qū)塊鏈開發(fā)的開源協(xié)議之后非常興奮。我們將在本文中同時介紹Brownie和Web3.py。

為什么選擇Python?

有這么多數(shù)據(jù)科學家、學者和金融科技機構(gòu)使用Python是有原因的。它用途廣泛,具有輕松的開發(fā)體驗,并且與各種第三方庫緊密結(jié)合在一起。頂級 defi 項目開始意識到這一點,諸如yearn.finance之類的項目使用python來部署其所有生產(chǎn)代碼。Yearn.finance由一群非常有才華的金融科技工程師經(jīng)營,他們轉(zhuǎn)向了區(qū)塊鏈,帶著他們熟悉和喜愛的Python工具。

Brownie是什么?

怎么使用Python的開發(fā)框架Brownie部署以太坊智能合約

Brownie是由Ben Hauser創(chuàng)建的Python智能合約開源框架,又名“iamdefinitelyahuman”(中文意思“非絕對人類”),是一件藝術(shù)品。這就是yearn.finance團隊用來部署和維護智能合約的工具。您可以使用簡單的命令啟動項目,然后立即開始使用代碼。

用Python部署您的第一個智能合約

1. 安裝 Brownie 和 bake

Brownie具有“baking”功能,可讓您使用一些基礎(chǔ)代碼啟動存儲庫,因為大多數(shù)項目都需要很多相同的部分,類似于create-eth-app。要開始使用,和其他所有Python軟件包的安裝方式一樣。

pip install eth-brownie

我們還需要安裝ganache-cli一個用于部署本地區(qū)塊鏈的軟件包。為此,您需要安裝npm和nodejs。

npm install -g ganache-cli

準備開始!我們將使用chainlink-mix入門,因為許多頂級defi項目都使用Chainlink來獲取其資產(chǎn)數(shù)據(jù)。

brownie bake chainlink-mix
cd chainlink

通過ls命令將向我們展示項目的結(jié)構(gòu)布局
Brownie項目布局

build : This is where the project keeps track of your deployed smart contracts and compiled contracts
contracts : The source code of your contracts, typically written in solidity or vyper
interfaces : A layout of interfaces you'll need to work with deployed contracts. Every interaction with a contract needs an ABI and an address. Interfaces are great ways to get a contract's ABI
scripts : Scripts we create to automate processes of working with our contracts
tests : Tests
brownie-config.yaml : This is where we have all the information for brownie to understand how to work with our smart contract. What blockchain do we want to deploy to? Are there any special parameters we want to set? All these are set in the config file.

requirements.txt,README.md,LICENSE和.gitignore可以忽略,您將在后面了解它們的用途。

2.設(shè)置環(huán)境變量

如果您熟悉區(qū)塊鏈開發(fā),就會知道本地區(qū)塊鏈,測試網(wǎng)區(qū)塊鏈和主網(wǎng)區(qū)塊鏈都是不同的東西。我們將部署到測試網(wǎng),以便我們可以與真實的實時區(qū)塊鏈網(wǎng)絡進行交互。您需要一個WEB3_INFURA_PROJECT_ID,可以通過創(chuàng)建Infura帳戶來檢索該WEB3_INFURA_PROJECT_ID。這就是我們用來連接到測試網(wǎng)絡的東西。我們還將獲得一個metamask或其他web3以太坊錢包,并用一些ETH進行注資。對于這個demo,我們要使用Kovan測試網(wǎng)絡。
您可以跳過有關(guān)LINK資金的部分,我們只需要testnet ETH。我們也不會使用Ropsten,而是使用Kovan。如果您已經(jīng)有了錢包,請從https://gitter.im/kovan-testnet/faucet獲取一些Kovan Ether。

安裝,配置和Metamask

一旦有了Metamask錢包,就可以將私鑰導出到PRIVATE_KEY環(huán)境變量。在此處(https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html)閱讀有關(guān)設(shè)置環(huán)境變量的信息。如果這仍然使您感到困惑,并且這只是一個測試錢包,請隨意將代碼中的PRIVATE_KEY替換為您的私鑰和WEB3_INFURA_PROJECT_ID。

3.部署您的智能合約

在我們的腳本文件夾中,我們有一個名為deploy_price_consumer_v3.py的腳本,該腳本將部署我們的智能合約,該合約讀取以太坊的美元價格。如果您想更輕松地了解該合約的功能以及如何部署它,請隨時查看有關(guān)部署價格訂閱合同的Chainlink教程(https://docs.chain.link/docs/beginners-tutorial/)。brownie run是我們可以用來運行腳本的命令。如果僅運行brownie,則可以看到所有命令的列表。

brownie run scripts/price_feed_scripts/deploy_price_consumer_v3.py --network kovan

--network kovan允許我們設(shè)置要使用的網(wǎng)絡。我們正在使用kovan testnet進行此演示。您將需要Kovan ETH來做到這一點!您將獲得很多輸出內(nèi)容,但最終會得到類似以下結(jié)果:

Running 'scripts/price_feed_scripts/deploy_price_consumer_v3.py::main'...
Transaction sent: 0x23d1dfa3937e0cfbab58f8d5ecabe2bfffc28bbe2349527dabe9289e747bac56
Gas price: 20.0 gwei   Gas limit: 145600   Nonce: 1339
PriceFeed.constructor confirmed - Block: 22721813   Gas used: 132364 (90.91%)
PriceFeed deployed at: 0x6B2305935DbC77662811ff817cF3Aa54fc585816

如果此方法正常運行,我們可以轉(zhuǎn)到kovan etherscan并找到我們部署的合約。上面的鏈接顯示了此示例中部署的合約。

4.讀取您的智能合約

現(xiàn)在我們已經(jīng)部署了智能合約,我們可以從剛剛部署的合約中讀取以太坊的價格。我們將運行另一個腳本:

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

得到類似以下的輸出:

Brownie v1.12.2 - Python development framework for Ethereum
ChainlinkProject is the active project.
Running 'scripts/price_feed_scripts/read_price_feed.py::main'...
Reading data from 0x6B2305935DbC77662811ff817cF3Aa54fc585816
62322000000
Where 62322000000 is the current price of ETH in USD! Solidity doesn't understand decimals, and we know that this example has 8 decimals, so the price is $623.22 .

您剛剛使用Python和Brownie部署了您的第一個智能合約!
使用web3.py
Brownie使用名為web3.py的工具讓您的開發(fā)更輕松,但是如果機智點,則我們始終可以直接在沒有框架的情況下使用合約。Web3.py是一個原始程序包,我們可以使用它來更直接地處理合同。為此,我們只需要上面的Kovan infura項目ID。請記住,要與任何智能合約進行交互,您需要做兩件事:

  • 智能合約ABI

  • 智能合約地址

Brownie 會在后臺處理很多此類工作,但我們也可以手動進行。這是通過web3.py從鏈上合同中讀取的內(nèi)容。首先,我們需要安裝web3.py。

pip install web3

然后,我們可以在文件中運行以下內(nèi)容。

web3 = Web3(Web3.HTTPProvider('https://kovan.infura.io/v3/<infura_project_id>')) 
abi = '[{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]' 
addr = '0x9326BFA02ADD2366b30bacB125260Af641031331' 
contract = web3.eth.contract(address=addr, abi=abi) 
latestData = contract.functions.latestRoundData().call() print(latestData)

運行上述操作后將在我們的控制臺中打印以美元為單位的ETH的最新價格。

以上是“怎么使用Python的開發(fā)框架Brownie部署以太坊智能合約”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI