如何从DeFi协议获取交易数据

  • 时间:
  • 浏览:76
  • 来源:区块链技术网

大家总是在谈论区块链的透明度,所有的数据都是可追踪的,每个人都可以看到所有的内容,但是访问这些信息容易吗?如何以简单的方式获得数据进行分析?

在本文中,我们将以DeFi Aavesome协议为例,介绍三种实现方法,我们将使用三种不同的方法来获取平台上的历史交易数据:

Graph:使用GraphQL构建分散应用程序的协议。

alethio:一个api rest以友好的方式从区块链获取数据。

Web3 Foundation team:使用web3js库直接在区块链上读取事件。

如何获取这些数据

为了访问区块链上的某些数据,最简单的方法是查询事件。当调用智能合约中的某个函数时,如果执行了某个操作,则可以发出一个事件,该事件可以在此时由正在侦听该特定事件的客户端侦听,或者在将来访问其记录在区块链上的历史记录。

在这种情况下,我们想查看在Aave协议中进行的存款的历史记录,因此如果有与此相关的事件,我们可以在其代码内部查看。

在其文档中,我们看到是否存在与此相关的事件,并且其中包含以下数据:

那么让我们看一下在主网上部署的智能合约,然后在该部分中查看代码:

其中包含此事件,如果我们想详细查看它生成的那一刻,我们会看到它在完成deposit函数后就完成了,因此我们寻找:

获取数据

一旦我们弄清楚我们要找的是什么,我们将以三种不同的方式获得这些数据。

Graph

Aave的团队创建了一个subgraph,可以在这个用例中对其进行测试,并且他们的网站上有相关的技术文档以及使用方法的示例

作为一个例子,我们想提取存款id,以及存款中的金额,然后进行分析,为此我们使用查询

{deposits(first:1000,skip:0){id,amount}}

返回相同的数据

我们必须重复这个查询n次,将skip参数从1000推进到1000,以显示下一个数据块。

Alethio

现在我们将使用Alethio api获取它,为此我们将使用端点:

https://api.aleth.io/v1/log-entries?filter[loggedBy]=0x398eC7346DcD622eDc5ae82352F02bE94C62d119&filter[hasLogTopics.0]=0xc12c57b1c73a2c3a2ea4613e9476abb3d8d146857aab7329e24243fb59710c82

我们在这里查询Aave合约地址的日志,并使用Deposit函数的哈希值过滤日志。

该端点返回的对象指示事件,事件的参数以及指向“next”页面的链接,以引入新的数据块。

我们通过增加现有“Deposit”事件的数量来迭代所有这些“next”链接。

web3Js

作为第三个选项,我们将直接从区块链读取事件,为此我们将使用web3js库,并使用以下脚本获取Aave合约中所有“ deposit”类型的事件:

constcontract=newweb3.eth.Contract(LendingPoolABI,LendingPoolAddress)returncontract.getPastEvents(‘Deposit’,{fromBlock:initBlock,toBlock:endBLock},function(error,events){returnevents})

结果比较

我们使用以上三种方法进行数据获取方式,我们将同时执行它们,查看我们是否会拥有相同数量的存款,并且来自三个不同来源的信息是否正确的,为此我们执行这三个方法并编写事件总数:

console.log(‘NumberofeventswithAlethio:’,(awaitgetDepositsAlethio()).length)console.log(‘Numberofeventswithweb3js:’,(awaitgetEventsWeb3js()).length)console.log(‘NumberofeventswithThegraph:’,(awaitgetDepositsGQL()).length)

结果输出显示:

NumberofeventswithAlethio:31810Numberofeventswithweb3js:31809NumberofeventswithThegraph:31682

我们得到的数据存有差异,在Alethio和web3js的情况下,这只是一个事件,但与graph相比的差异更大。

进行了几次测试,我已经验证了从事件的生成到在graph中将其索引之前存在一定的延迟,所以如果查询这个事件,在graph中将找不到其他任何东西,但是几分钟后,记录的事件数量不一致。

通过这三种方式,您可以查阅数据,使用构建模型创建自己的数据集,并验证这些协议显示的信息是否正确。

---------------------------------------------------

原文作者:Iván Alberquilla

原文链接:https://medium.com/coinmonks/defi-protocol->译者:链三丰

猜你喜欢

区块链骗局曝光骗局,看看你上过当没有?

区块链骗局曝光骗局,看看你上过当没有? 随着这一波的下跌,很多人怕是过不好这个年了。 其实按道理说,从6万上方跌到5万,和从43000跌到35000跌幅差不多,但为什么大家的感受如此截然不同?

2022-01-24

从零开发区块链应用(一)-golang配置文件管理工具viper

理解 HTTP 构建的网络应用只要关注两个端--客户端(client)和服务端(server),两个端的交互来自 client 的 request,以及 server 端的 response。所谓的 http 服务器,主要在于如何接受 client 的 request,并向 client 返回 response

2022-01-20

从零开发区块链应用(二)--mysql安装及数据库表的安装创建

varchar 类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取 0~~65525 之间的任意值。指定了 varchar 类型的最大值以后,其长度可以在 o 到最大长度之间。

2022-01-20

从零开发区块链应用(三)--mysql初始化及gorm框架使用

Gorm 是 golang 的一个 orm 框架,它提供了对数据库操作的封装,使用起来相当便利。所以如果对 mysql 使用操作不熟悉,建议也可以使用 gorm 框架操作 mysql 数据库。

2022-01-20

从零开发区块链应用(四)--自定义业务错误信息

在实际业务开发中,一个条错误信息需要包含两部分内容:直接展示给用户的 message 和用于开发人员 debug 的 error 。message 可能会直接展示给用户,error 是用于 debug 的错误信息,可能包含敏感/内部信息,不宜对外展示

2022-01-20