在我們開始之前,讓我們先來看看一些定義。
Graph 專案使用 GraphQL,這是一種描述如何詢問資料的語法。這種語法並不與特定類型的資料庫或儲存引擎掛鉤,而是以你現有的程式碼和資料為支撐。
讓我們先來看看一個非常簡單的GraphQL查詢結構,以及我們執行它時得到的結果。一旦GraphQL服務開始運行,它就可以接收GraphQL查詢語句來執行。此服務檢查查詢語句,以確保它只關聯定義的類型和字段,然後運行函數以產生結果。
作為一個例子,查看下面的查詢結構:
上面的GraphQL查詢可以產生以下結果:
你可以看到,查詢的結構與結果相同。這對GraphQL至關重要,因為伺服器可以確切地知道客戶要求的是什麼欄位。
我們可以使用GraphQL來進行以下操作:
可以存取GraphQL官網,了解更多關於如何撰寫複雜的GraphQL查詢。
#https://www.php.cn/link/b950ea26ca12daae142bd74dba4427c8
#為了更了解The Graph項目是什麼以及它如何工作,請訪問thegraph.com/docs。它解釋瞭如何部署一個 subgraph以及如何查詢 subgraph的資料。一個 subgraph定義了 TheGraph將從以太坊索引哪些數據,以及如何儲存這些數據。一旦 subgraph被部署,就可以使用GraphQL語法進行查詢。
在本教程中,我們將專注於從 subgraph中查詢資料。
1、造訪The Graph Explorer( https://thegraph.com/explorer/),查看以太坊區塊鏈存在的所有託管subgraph。這些託管服務(subgraphs)中的每一個都可以被查詢到資料。
2、選擇一個 subgraphs頁面,並注意該頁面的http查詢位址和 Playground。
3、在你的Python程式碼中需要http查詢位址,它是包含區塊鏈資料的端點。這個服務將執行你的GraphQL查詢。
4.確保你在 Playground上進行實驗。網站的這一部分將允許你建立和測試你的GraphQL Ethereum區塊鏈查詢。
#接下來基於我們在The Graph的Playground中建立的一些查詢,可以在我們的Python程式碼中使用它來請求來自Ethereum區塊鏈的不同資料。
下面的Python範例程式碼包含一個通用函數,用於向一個 subgraph發出帖子請求。為了使用不同的 subgraph,你需要改變url端點和GraphQL語法。我在程式的末尾包含了一個列印語句(更容易閱讀),所以來自Ethereum區塊鏈的結果會在你的控制台中列印出來。
例1:使用Python中的GraphQL查詢以太坊區塊鏈上的Aave,以獲得按時間戳劃分的最近10筆閃電貸款的列表
import requests # pretty print is used to print the output in the console in an easy to read format from pprint import pprint # function to use requests.post to make an API call to the subgraph url def run_query(q): # endpoint where you are making the request request = requests.post('https://api.thegraph.com/subgraphs/name/aave/protocol' '', json={'query': query}) if request.status_code == 200: return request.json() else: raise Exception('Query failed. return code is {}.{}'.format(request.status_code, query)) # The Graph query - Query aave for a list of the last 10 flash loans by time stamp query = """ { flashLoans (first: 10, orderBy: timestamp, orderDirection: desc,){ id reserve { name symbol } amount timestamp } } """ result = run_query(query) # print the results print('Print Result - {}'.format(result)) print('#############') # pretty print the results to make it easier to read pprint(result)
例2:使用Python中的GraphQL查詢以太坊區塊鏈上的Uniswap,以獲得前10對的列表
下面的查詢是Uniswap的一個排行榜,詳細介紹了按ETH存入量降序排列的頂級ETH流動性供應商。這可以幫助你更好地分析用戶行為,例如追蹤市場上的熱門人物,並觀察ETH的流動性供應商與其他代幣之間的關係。其他可以查詢的用戶欄位包括他們的地址,歷史購買和出售的資產以及該用戶支付的總費用。
import requests # pretty print is used to print the output in the console in an easy to read format from pprint import pprint # function to use requests.post to make an API call to the subgraph url def run_query(q): # endpoint where you are making the request request = requests.post('https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2' '', json={'query': query}) if request.status_code == 200: return request.json() else: raise Exception('Query failed. return code is {}.{}'.format(request.status_code, query)) # 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 query = """ { pairs(first: 10, where: {reserveUSD_gt: "1000000", volumeUSD_gt: "50000"}, orderBy: reserveUSD, orderDirection: desc) { id token0 { id symbol } token1 { id symbol } reserveUSD volumeUSD } } """ result = run_query(query) # print the results print('Print Result - {}'.format(result)) print('#############') # pretty print the results pprint(result)
在Python中使用The Graph來查詢Ethereum資料是非常強大的。有很多數據可以被查詢,用於產生報告和分析。
此程式碼僅用於學習和娛樂目的。程式碼沒有經過審計,使用風險自負,合約是實驗性質的,可能包含bug。
以上是使用 Python 操作以太坊 Graph 資料的步驟的詳細內容。更多資訊請關注PHP中文網其他相關文章!