溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Defi數(shù)據(jù)引擎The Graph的調(diào)用方法是什么

發(fā)布時間:2021-12-20 11:19:08 來源:億速云 閱讀:112 作者:柒染 欄目:互聯(lián)網(wǎng)科技

Defi數(shù)據(jù)引擎The Graph的調(diào)用方法是什么,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

當你嘗試訪問以太坊智能合約以及DApp產(chǎn)生的區(qū)塊鏈數(shù)據(jù)時,可能會發(fā)現(xiàn)很難將數(shù)據(jù)轉(zhuǎn)換為一種可讀的格式。 The Graph提供了一種用于查詢以太坊和IPFS網(wǎng)絡數(shù)據(jù)的索引協(xié)議,任何人都可以基于其提供的開放API創(chuàng)建并發(fā)布索引數(shù)據(jù),即subgraph,這使得區(qū)塊鏈數(shù)據(jù)更容易訪問。我們將學習如何使用The Graph來查詢Aave協(xié)議數(shù)據(jù),使用的技術棧包括Graphql、JavaScript和Nodejs。

1、訪問The Graph的準備工作

教程的第一步是訪問The Graph網(wǎng)站并查看目前已經(jīng)支持的協(xié)議,例如Uniswap、ERC20、Aave、Compound等等。如果找到了你要提取數(shù)據(jù)的協(xié)議,例如Aave,那么點擊該協(xié)議進入:

Defi數(shù)據(jù)引擎The Graph的調(diào)用方法是什么

你要做的第一件事就是記下來頁面上的地址(1),后面要用這個地址來查詢。在我們的示例中,這個地址就是: https://api.thegraph.com/subgraphs/name/aave/protocol

左邊的區(qū)域(2)給出了一個查詢示例,你可以點擊【play】按鈕來執(zhí)行。也可以修改查詢示例進行其他測試。

右邊的區(qū)域(3)給出了這個subgraph所包含的實體的描述。點擊其中任何一個實體都會給出該實體更詳細的說明信息,包括它的字段以及與其他實體的關系。

2、構造GraphQL查詢語句

在下面的示例中,我們將構造一個簡單的查詢語句,來列出Aave平臺上最新的閃電貸。The Graph的查詢使用GraphQL,如果你還不熟悉GrapQL,可以查看這個教程。

在開始寫GraphQL查詢語句之前,我們還需要先了解下閃電貸在graph中是如何定義的。為此我們可以在左邊搜索FlashLoan實體,查看它包含了哪些內(nèi)容:

Defi數(shù)據(jù)引擎The Graph的調(diào)用方法是什么

我們的查詢語句將查找最新的10條閃電貸記錄:

{
  flashLoans(first: 10, orderBy: timestamp, orderDirection: desc) {
    id
    reserve {
      name
      symbol
    }
    amount,
    target,
    timestamp
  }
}

注意閃電貸對象指向另一個實體reserve,即儲備庫。

3、使用NodeJS提交GraphQL查詢

The Graph的用戶界面為測試和開發(fā)自己的查詢提供了一個非常好的辦法。現(xiàn)在是時候用JavaScript(或你選擇的其他語言)來實現(xiàn)查詢了。這個過程很簡單,我們只需要將查詢語句通過HTTP POST請求提交給The Graph提供的https訪問端節(jié)點。

我們使用axios來處理請求:

npm install axios --save

整個代碼看起來是這樣:

const axios = require('axios')

axios.post('https://api.thegraph.com/subgraphs/name/aave/protocol', {
  query: `
  {
    flashLoans(first: 10, orderBy: timestamp, orderDirection: desc) {
      id
      reserve {
        name
        symbol
      }
      amount,
      target,
      timestamp
    }
  }  
  `
})
.then((res) => {
  for (const flashsloan of res.data.data.flashLoans) {
    console.log(flashsloan)
  }
})
.catch((error) => {
  console.error(error)
})

執(zhí)行結果類似下圖:

Defi數(shù)據(jù)引擎The Graph的調(diào)用方法是什么

使用The Graph索引過的數(shù)據(jù)可以讓你避免監(jiān)聽區(qū)塊鏈事件、解碼事件參數(shù)或者處理token小數(shù)點問題,開發(fā)效率和系統(tǒng)穩(wěn)定性都會得到很大提高。

看完上述內(nèi)容,你們掌握Defi數(shù)據(jù)引擎The Graph的調(diào)用方法是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI