当前位置: 首页 > 科技观察

使用Python在Graph中查询以太坊数据

时间:2023-03-16 01:08:08 科技观察

在我们开始之前,让我们看一下一些定义。GraphQL是一种查询语言TheGraph是一个使用GraphQL查询语言的区块链项目。该项目允许任何人构建和发布一个称为子图的开放API。Graph项目使用GraphQL,这是一种描述如何查询数据的语法。此语法不依赖于特定类型的数据库或存储引擎,而是由您现有的代码和数据支持。GraphQL让我们首先看一个非常简单的GraphQL查询结构,以及运行它时得到的结果。一旦GraphQL服务器运行,它就可以接收要执行的GraphQL查询。该服务检查查询以确保它仅关联已定义的类型和字段,然后运行该函数以生成结果。例如,请看下面的查询结构:上面的GraphQL查询可以产生以下结果:如您所见,查询与结果具有相同的结构。这对GraphQL至关重要,因为服务器确切地知道客户端请求的字段。我们可以使用GraphQL来做以下事情:搜索数据在你的请求中传递参数使用别名等。访问GraphQL官网了解更多关于如何编写复杂的GraphQL查询。https://graphql.org/learn/queries/TheGraph要更好地了解TheGraph项目是什么以及它是如何工作的,请访问thegraph.com/docs。它解释了如何部署子图以及如何查询子图的数据。子图定义了TheGraph将从以太坊索引哪些数据,以及如何存储这些数据。部署子图后,可以使用GraphQL语法查询它。在本教程中,我们将重点关注从子图中查询数据。1.访问TheGraphExplorer(https://thegraph.com/explorer/)查看以太坊区块链上存在的所有托管子图。这些托管服务(子图)中的每一个都可以查询数据。2.选择一个subgraphs页面,注意页面的http查询地址和Playground。3.在你的Python代码中,你需要http查询地址,这是包含区块链数据的端点。该服务将执行您的GraphQL查询。4.确保在Playground上进行实验。该站点的这一部分将允许您构建和测试对以太坊区块链的GraphQL查询。选择示例查询显示示例查询并可以对其进行编辑按运行按钮显示结果屏幕的最右侧显示可以添加到查询中的字段列表。在Python中使用TheGraph接下来基于我们在TheGraph'sPlayground中构建的一些查询,我们可以在我们的Python代码中使用它来从以太坊区块链请求不同的数据。以下Python示例代码包含一个通用函数,用于向子图发出发布请求。为了使用不同的子图,您需要更改url端点和GraphQL语法。我在程序末尾包含了一条打印语句(更易于阅读),因此以太坊区块链的结果将打印在您的控制台中。示例1:使用Python中的GraphQL在以太坊区块链上查询Aave,通过时间戳导入请求获取最近10笔闪贷的列表#prettyprint用于以易于阅读的格式在控制台中打印输出frompprintimportpprint#函数使用requests.post对子图url进行API调用defrun_query(q):#endpointwhereyouaremakingtherequestrequest=requests.post('https://api.thegraph.com/subgraphs/name/aave/protocol''',json={'query':query})ifrequest.status_code==200:returnrequest.json()else:raiseException('Queryfailed.returncodeis{}.{}'.format(request.status_code,query))#Graph查询-按时间戳查询最近10笔闪电贷的列表query="""{flashLoans(first:10,orderBy:timestamp,orderDirection:desc,){idreserve{namesymbol}amount时间戳}}"""result=run_query(query)#打印结果print('PrintResult-{}'.format(result))print('##############')#漂亮地打印结果以使其更易于阅读pprint(result)示例2:使用Python中的GraphQL查询以太坊区块链上的Uniswap以获得前10对的列表按ETH存款的降序排列列出了顶级ETH流动性提供者。这可以帮助你更好地分析用户行为,例如跟踪市场上的热门人物,观察ETH流动性提供者与其他代币之间的关系。其他可以查询的用户字段包括他们的地址、历史资产买卖和总费用由该用户支付。importrequests#prettyprint用于以易于阅读的格式在控制台中打印输出pprintimportpprint#使用requests.post对子图进行API调用的函数urldefrun_query(q):#端点正在发出请求request=requests.post('https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2''',json={'query':query})ifrequest.status_code==200:returnrequest.json()else:raiseException('Queryfailed.returncodeis{}.{}'.format(request.status_code,query))#TheGraphquery-查询Uniswap以获得前10名的列表储备大于1000000且交易量大于50000的货币对){idtoken0{idsymbol}token1{idsymbol}reserveUSDvolumeUSD}}"""result=run_query(query)#打印结果print('PrintResult-{}'.format(result))print('#############')#prettyprinttheresultspprint(result)使用Python中的TheGraph查询以太坊数据非常强大,可以查询到的数据非常多,可以做报表和分析,这段代码仅供用于学习和娱乐目的。此代码未经审核,使用风险自负,合约是实验性的,可能包含错误。