在其文件中,我們看到是否存在與此相關的事件,並且其中包含以下資料:
那麼讓我們看一下在主網上部署的智慧合約,然後在該部分中檢視程式碼:
其中包含此事件,如果我們想詳細檢視它生成的那一刻,我們會看到它在完成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中將找不到其他任何東西,但是幾分鐘後,記錄的事件數量不一致。
透過這三種方式,您可以查閱資料,使用構建模型建立自己的資料集,並驗證這些協議顯示的資訊是否正確。