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

来源:爱站网时间:2020-07-11编辑:网友分享
大家总是在谈论区块链的透明度,所有的数据都是可追踪的,每个人都可以看到所有的内容,但是访问这些信息容易吗?如何以简单的方式获得数据进行分析?在本文中,我们将以DeFi Aavesome协议为例,介绍三种实现方法,我们将使用三种不同的方法来获取平台上的历史交易数据。

简  介

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

在本文中,我们将以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”类型的事件:

const contract = new web3.eth.Contract(LendingPoolABI, LendingPoolAddress)
return contract.getPastEvents(‘Deposit’, {
   fromBlock: initBlock,
   toBlock: endBLock
}, function (error, events) { return events })

结果比较

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

console.log(‘Number of events with Alethio:’, (await getDepositsAlethio()).length)
console.log(‘Number of events with web3js:’, (await getEventsWeb3js()).length)
console.log(‘Number of events with The graph:’, (await getDepositsGQL()).length)

结果输出显示:

Number of events with Alethio: 31810
Number of events with web3js: 31809
Number of events with The graph: 31682

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

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

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

上一篇:本地开发环境以太坊合约交互实战

下一篇:如何使用JavaScript为DeFi协议提供资产数据

您可能感兴趣的文章

相关阅读

查看更多 >

热门软件源码

最新软件源码下载