自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

GraphQL

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

作為一個(gè)例子,查看下面的查詢結(jié)構(gòu):

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

你可以看到,查詢的結(jié)構(gòu)與結(jié)果相同。這對(duì)GraphQL至關(guān)重要,因?yàn)榉?wù)器可以確切地知道客戶要求的是什么字段。

我們可以使用GraphQL來進(jìn)行以下操作:

  • 搜索數(shù)據(jù)
  • 在你的請(qǐng)求中傳遞參數(shù)
  • 使用別名等

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

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

The Graph

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

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

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

2、選擇一個(gè) subgraphs頁(yè)面,并注意該頁(yè)面的http查詢地址和 Playground。

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

4.確保你在 Playground上進(jìn)行實(shí)驗(yàn)。該網(wǎng)站的這一部分將允許你構(gòu)建和測(cè)試你的GraphQL Ethereum區(qū)塊鏈查詢。

  • 選擇一個(gè)樣本查詢
  • 顯示樣本查詢,并可以進(jìn)行編輯
  • 按下運(yùn)行按鈕
  • 顯示結(jié)果
  • 屏幕的最右邊顯示了一個(gè)字段列表,你可以將其添加到你的查詢中。

在Python中使用The Graph

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

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

例1:使用Python中的GraphQL查詢以太坊區(qū)塊鏈上的Aave,以獲得按時(shí)間戳劃分的最近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查詢以太坊區(qū)塊鏈上的Uniswap,以獲得前10對(duì)的列表

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

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數(shù)據(jù)是非常強(qiáng)大的。有很多數(shù)據(jù)可以被查詢,用于生成報(bào)告和分析。

此代碼僅用于學(xué)習(xí)和娛樂目的。該代碼沒有經(jīng)過審計(jì),使用風(fēng)險(xiǎn)自負(fù),合約是實(shí)驗(yàn)性質(zhì)的,可能包含bug。

責(zé)任編輯:龐桂玉 來源: Python中文社區(qū)
相關(guān)推薦

2022-04-23 16:47:52

以太坊Web3.py區(qū)塊鏈

2021-10-26 00:27:28

Python以太坊智能

2021-05-02 22:19:46

以太坊比特幣加密貨幣

2021-12-08 13:57:29

以太坊加密貨幣比特幣

2021-05-22 22:57:24

以太坊加密貨幣比特幣

2021-05-03 23:32:55

以太坊區(qū)塊鏈比特幣

2022-10-18 08:00:00

2021-04-19 12:31:04

太坊數(shù)據(jù)QuestDB

2021-05-13 16:13:21

區(qū)塊鏈以太坊NFT

2021-04-29 16:11:14

以太坊共識(shí)鏈驗(yàn)證者

2018-06-01 09:17:52

區(qū)塊鏈以太坊

2021-05-07 09:06:55

GraphQLAPI 以太坊

2021-06-04 11:45:36

病毒軟件挖礦惡意軟件

2022-09-06 14:35:34

區(qū)塊鏈以太坊NFT

2022-03-01 08:10:24

區(qū)塊鏈以太坊數(shù)據(jù)庫(kù)

2021-03-10 13:59:32

以太坊數(shù)據(jù)網(wǎng)絡(luò)

2021-03-04 11:05:24

比特幣以太坊加密貨幣

2022-09-20 11:34:15

以太坊PoS共識(shí)機(jī)制攻擊

2021-03-08 21:44:33

以太坊區(qū)塊鏈比特幣

2021-02-10 16:10:37

以太坊區(qū)塊鏈網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)