<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 Python 在 Graph 中查詢以太坊數(shù)據(jù)

          共 3869字,需瀏覽 8分鐘

           ·

          2022-04-19 11:41



          本文主要介紹如何在Python中使用The Graph來查詢以太坊數(shù)據(jù)。The Graph項目是一個用于查詢?nèi)ブ行幕W(wǎng)絡的索引系統(tǒng)。你可以使用The Graph來查詢Ethereum、IPFS等系統(tǒng)。

          在我們開始之前,讓我們先來看看一些定義。

          • GraphQL是一種查詢語言

          • The Graph是一個使用GraphQL查詢語言的區(qū)塊鏈項目。該項目允許任何人建立和發(fā)布一個稱為?subgraph?的開放API。

          Graph 項目使用 GraphQL,這是一種描述如何詢問數(shù)據(jù)的語法。這種語法并不與特定類型的數(shù)據(jù)庫或存儲引擎掛鉤,而是以你現(xiàn)有的代碼和數(shù)據(jù)為支撐。

          GraphQL

          讓我們先看看一個非常簡單的GraphQL查詢結構,以及我們運行它時得到的結果。一旦GraphQL服務開始運行,它就可以接收GraphQL查詢語句來執(zhí)行。該服務檢查查詢語句,以確保它只關聯(lián)定義的類型和字段,然后運行函數(shù)以產(chǎn)生結果。

          作為一個例子,查看下面的查詢結構:

          上面的GraphQL查詢可以產(chǎn)生以下結果:

          你可以看到,查詢的結構與結果相同。這對GraphQL至關重要,因為服務器可以確切地知道客戶要求的是什么字段。

          我們可以使用GraphQL來進行以下操作:

          • 搜索數(shù)據(jù)

          • 在你的請求中傳遞參數(shù)

          • 使用別名等

          可以訪問GraphQL官網(wǎng),了解更多關于如何編寫復雜的GraphQL查詢。

          https://graphql.org/learn/queries/

          The Graph

          為了更好地了解The Graph項目是什么以及它如何工作,請訪問 thegraph.com/docs。它解釋了如何部署一個 subgraph以及如何查詢 subgraph的數(shù)據(jù)。一個 subgraph定義了 TheGraph將從以太坊索引哪些數(shù)據(jù),以及如何存儲這些數(shù)據(jù)。一旦 subgraph被部署,就可以使用GraphQL語法進行查詢。

          在本教程中,我們將專注于從 subgraph中查詢數(shù)據(jù)。

          1、訪問The Graph Explorer( https://thegraph.com/explorer/),查看以太坊區(qū)塊鏈存在的所有托管subgraph。這些托管服務(subgraphs)中的每一個都可以被查詢到數(shù)據(jù)。

          2、選擇一個 subgraphs頁面,并注意該頁面的http查詢地址和 Playground

          3、在你的Python代碼中需要http查詢地址,它是包含區(qū)塊鏈數(shù)據(jù)的端點。這個服務將執(zhí)行你的GraphQL查詢。

          4.確保你在 Playground上進行實驗。該網(wǎng)站的這一部分將允許你構建和測試你的GraphQL Ethereum區(qū)塊鏈查詢。

          • 選擇一個樣本查詢

          • 顯示樣本查詢,并可以進行編輯

          • 按下運行按鈕

          • 顯示結果

          • 屏幕的最右邊顯示了一個字段列表,你可以將其添加到你的查詢中。


          在Python中使用The Graph

          接下來基于我們在The Graph的Playground中構建的一些查詢,可以在我們的Python代碼中使用它來請求來自Ethereum區(qū)塊鏈的不同數(shù)據(jù)。

          下面的Python示例代碼包含一個通用函數(shù),用于向一個 subgraph發(fā)出帖子請求。為了使用不同的 subgraph,你需要改變url端點和GraphQL語法。我在程序的末尾包含了一個打印語句(更容易閱讀),所以來自Ethereum區(qū)塊鏈的結果會在你的控制臺中打印出來。

          例1:使用Python中的GraphQL查詢以太坊區(qū)塊鏈上的Aave,以獲得按時間戳劃分的最近10筆閃電貸款的列表

          1. import requests

          2. # pretty print is used to print the output in the console in an easy to read format

          3. from pprint import pprint



          4. # function to use requests.post to make an API call to the subgraph url

          5. def run_query(q):


          6. # endpoint where you are making the request

          7. request = requests.post('https://api.thegraph.com/subgraphs/name/aave/protocol'

          8. '',

          9. json={'query': query})

          10. if request.status_code == 200:

          11. return request.json()

          12. else:

          13. raise Exception('Query failed. return code is {}. {}'.format(request.status_code, query))



          14. # The Graph query - Query aave for a list of the last 10 flash loans by time stamp

          15. query = """


          16. {

          17. flashLoans (first: 10, orderBy: timestamp, orderDirection: desc,){

          18. id

          19. reserve {

          20. name

          21. symbol

          22. }

          23. amount

          24. timestamp

          25. }

          26. }

          27. """

          28. result = run_query(query)


          29. # print the results

          30. print('Print Result - {}'.format(result))

          31. print('#############')

          32. # pretty print the results to make it easier to read

          33. pprint(result)

          例2:使用Python中的GraphQL查詢以太坊區(qū)塊鏈上的Uniswap,以獲得前10對的列表

          下面的查詢是Uniswap的一個排行榜,詳細介紹了按ETH存入量降序排列的頂級ETH流動性供應商。這可以幫助你更好地分析用戶行為,比如跟蹤市場上的熱門人物,觀察ETH的流動性供應商與其他代幣之間的關系。其他可以查詢的用戶字段包括他們的地址,歷史購買和出售的資產(chǎn)以及該用戶支付的總費用。

          1. import requests

          2. # pretty print is used to print the output in the console in an easy to read format

          3. from pprint import pprint



          4. # function to use requests.post to make an API call to the subgraph url

          5. def run_query(q):


          6. # endpoint where you are making the request

          7. request = requests.post('https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2'

          8. '',

          9. json={'query': query})

          10. if request.status_code == 200:

          11. return request.json()

          12. else:

          13. raise Exception('Query failed. return code is {}. {}'.format(request.status_code, query))



          14. # The Graph query - Query Uniswap for a list of the top 10 pairs where the reserve is > 1000000 USD and the volume is >50000 USD

          15. query = """


          16. {

          17. pairs(first: 10, where: {reserveUSD_gt: "1000000", volumeUSD_gt: "50000"}, orderBy: reserveUSD, orderDirection: desc) {

          18. id

          19. token0 {

          20. id

          21. symbol

          22. }

          23. token1 {

          24. id

          25. symbol

          26. }

          27. reserveUSD

          28. volumeUSD

          29. }

          30. }

          31. """

          32. result = run_query(query)


          33. # print the results

          34. print('Print Result - {}'.format(result))

          35. print('#############')

          36. # pretty print the results

          37. pprint(result)

          在Python中使用The Graph來查詢Ethereum數(shù)據(jù)是非常強大的。有很多數(shù)據(jù)可以被查詢,用于生成報告和分析。

          此代碼僅用于學習和娛樂目的。該代碼沒有經(jīng)過審計,使用風險自負,合約是實驗性質(zhì)的,可能包含bug。

          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一级电影网站 | 青青操逼视频在线观看 | 免费国产黄色电影 | 天天操人妻 | 黄色电影在线观看国内免费 |