最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年05月28日 12:00:29   作者:Collins  
在本文中,我們將使用Python部署智能合約。這篇文章可能是您走向智能合約和區(qū)塊鏈開(kāi)發(fā)的橋梁!

介紹

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

為什么選擇Python?

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

Brownie是什么?

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

用Python部署您的第一個(gè)智能合約

1. 安裝 Brownie 和 bake

Brownie具有“baking”功能,可讓您使用一些基礎(chǔ)代碼啟動(dòng)存儲(chǔ)庫(kù),因?yàn)榇蠖鄶?shù)項(xiàng)目都需要很多相同的部分,類似于create-eth-app。要開(kāi)始使用,和其他所有Python軟件包的安裝方式一樣。

pip install eth-brownie

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

npm install -g ganache-cli

準(zhǔn)備開(kāi)始!我們將使用chainlink-mix入門(mén),因?yàn)樵S多頂級(jí)defi項(xiàng)目都使用Chainlink來(lái)獲取其資產(chǎn)數(shù)據(jù)。

brownie bake chainlink-mix
cd chainlink

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

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

安裝,配置和Metamask

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

3.部署您的智能合約

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

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

--network kovan允許我們?cè)O(shè)置要使用的網(wǎng)絡(luò)。我們正在使用kovan testnet進(jìn)行此演示。您將需要Kovan ETH來(lái)做到這一點(diǎn)!您將獲得很多輸出內(nèi)容,但最終會(huì)得到類似以下結(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

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

4.讀取您的智能合約

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

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部署了您的第一個(gè)智能合約!
使用web3.py
Brownie使用名為web3.py的工具讓您的開(kāi)發(fā)更輕松,但是如果機(jī)智點(diǎn),則我們始終可以直接在沒(méi)有框架的情況下使用合約。Web3.py是一個(gè)原始程序包,我們可以使用它來(lái)更直接地處理合同。為此,我們只需要上面的Kovan infura項(xiàng)目ID。請(qǐng)記住,要與任何智能合約進(jìn)行交互,您需要做兩件事:

  • 智能合約ABI
  • 智能合約地址

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

pip install web3

然后,我們可以在文件中運(yùn)行以下內(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)

運(yùn)行上述操作后將在我們的控制臺(tái)中打印以美元為單位的ETH的最新價(jià)格。請(qǐng)查看Chainlink文檔以確定是否有問(wèn)題。

結(jié)論

您可以從他們的文檔中了解有關(guān)Web3.py和Brown的更多信息。這兩個(gè)項(xiàng)目都是開(kāi)源的,任何人都可以做出貢獻(xiàn)!
https://github.com/eth-brownie/brownie
https://github.com/ethereum/web3.py

以上就是使用Python的開(kāi)發(fā)框架Brownie部署以太坊智能合約的詳細(xì)內(nèi)容,更多關(guān)于Python部署智能合約的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用python實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    用python實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了用python實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Python+unittest+requests+excel實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架

    Python+unittest+requests+excel實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架

    這篇文章主要介紹了Python+unittest+requests+excel實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python連接mysql方法及常用參數(shù)

    Python連接mysql方法及常用參數(shù)

    這篇文章主要介紹了Python連接mysql方法及常用參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • python使用imap-tools模塊下載郵件附件的示例

    python使用imap-tools模塊下載郵件附件的示例

    imap-tools模塊是python的第三方擴(kuò)展,?它使用標(biāo)準(zhǔn)庫(kù)imaplib,并將常見(jiàn)的郵件處理事件封裝,郵件處理起來(lái)代碼短,下面給大家介紹下python使用imap-tools模塊下載郵件中的附件示例代碼,感興趣的朋友一起看看吧
    2021-12-12
  • windows環(huán)境中利用celery實(shí)現(xiàn)簡(jiǎn)單任務(wù)隊(duì)列過(guò)程解析

    windows環(huán)境中利用celery實(shí)現(xiàn)簡(jiǎn)單任務(wù)隊(duì)列過(guò)程解析

    這篇文章主要介紹了windows環(huán)境中利用celery實(shí)現(xiàn)簡(jiǎn)單任務(wù)隊(duì)列過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python二分查找搜索算法的多種實(shí)現(xiàn)方法

    python二分查找搜索算法的多種實(shí)現(xiàn)方法

    二分查找,也稱折半查找,是一種效率較高的查找方法,本文主要介紹了python二分查找搜索算法的多種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • python文件開(kāi)頭聲明UTF-8編碼的幾種常用方式匯總

    python文件開(kāi)頭聲明UTF-8編碼的幾種常用方式匯總

    這篇文章主要介紹了python文件開(kāi)頭聲明UTF-8編碼的幾種常用方式匯總,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)

    python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • python實(shí)現(xiàn)人人對(duì)戰(zhàn)的五子棋游戲

    python實(shí)現(xiàn)人人對(duì)戰(zhàn)的五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)人人對(duì)戰(zhàn)的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python 讀取數(shù)據(jù)庫(kù)并繪圖的實(shí)例

    python 讀取數(shù)據(jù)庫(kù)并繪圖的實(shí)例

    今天小編就為大家分享一篇python 讀取數(shù)據(jù)庫(kù)并繪圖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12

最新評(píng)論

香港| 桦甸市| 贵南县| 新郑市| 巧家县| 清水河县| 浮梁县| 高雄县| 长沙市| 高唐县| 连城县| 巴中市| 尖扎县| 沅陵县| 巨野县| 西峡县| 晋中市| 象山县| 西乌珠穆沁旗| 海丰县| 北票市| 内丘县| 石景山区| 巴林右旗| 德昌县| 清流县| 富锦市| 娱乐| 姚安县| 定陶县| 南木林县| 樟树市| 玉田县| 寿光市| 乌苏市| 阜南县| 霍城县| 虹口区| 南城县| 和平县| 丰都县|