比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > DAI > Info

The Graph 入門教程:如何索引合約事件_GRAP

Author:

Time:1900/1/1 0:00:00

編寫智能合約時,通常狀態的變化是通過觸發一個事件來表達,TheGraph則是捕捉區塊鏈事件并提供一個查詢事件的GraphQL接口,讓我們可以方便的跟蹤數據的變化。實際上很多DEFI協議及都是TheGraph來基于查詢數據。

這篇TheGraph教程在官方的教程基礎上,進行了一些補充擴展主要包含以下內容:

在Ropsten部署一個合約,并調用觸發事件。

創建定義數據索引的Subgraph。

部署Subgraph到TheGraph,實現數據索引。

在前端DApp中查詢索引數據。

本教程的完整代碼已上傳到GitHub:https://github

Gravatarpublicgravatars;mapping(uint=>address)publicgravatarToOwner;mapping(address=>uint)publicownerToGravatar;functioncreateGravatar(string_displayName,string_imageUrl)public{require(ownerToGravatar==0);uintid=gravatars

functionupdateGravatarName(string_displayName)public{require(ownerToGravatar!=0);require(msg

}

可以看到合約里在創建和更新時分別觸發了NewGravatar和UpdatedGravatar事件,稍后再subgraph里,將跟蹤這兩個事件,但是需要我們先把合約部署到網絡上,這里使用以太坊測試網Ropsten:

Tether CTO:Terra項目并非Rug Pull,而是設計糟糕的“紙牌城堡”:5月20日消息,Tether和Bitfinex首席技術官Paolo Ardoino認為,Terra(LUNA)項目并不是為了Rug Pull,而只是“設計糟糕”。

在談到Terra生態市場崩潰時,Ardoino將Terra算法穩定幣TerraUSD(UST)比作一座隨時都會倒塌的“紙牌城堡”。Ardoino表示,我不認識Do Kwon。但是讓我們假定他是無辜的。他傲慢地創建了這個項目,并認為他是對的,許多人支持他,當然可能是出于經濟原因,但這項目本身并不是為了Rug Pull,這是一個設計糟糕的項目,而許多項目都設計糟糕。那就像一座紙牌城堡,它可能會倒塌,但他當然不能說出來,因為否則它會倒得更快,而且,我很清楚,很多人都很清楚,我知道這是一個壞主意。

Ardoino稱,UST已經變得太大而無法保持錨定,因為其抵押品不足以支撐該穩定幣,但仍然大到足以讓市場進一步崩盤。(Cointelegraph)[2022/5/20 3:30:45]

module.exports={networks:{ropsten:{provider:function(){returnnewHDWalletProvider(process.env.MNEMONIC,`https://ropsten.infura.io/v3/${process.env.ROPSTEN_INFURA_API_KEY}`。,network_id:'3',},}}

這里為了安全考慮,把助記詞和APIKEY保存在.env文件中

添加部署腳本2_deploy_contract.js:

P2E游戲公會BlockchainSpace成為The Sandbox官方合作伙伴:12月10日消息,P2E游戲公會BlockchainSpace宣布,已經成為The Sandbox的官方合作伙伴。BlockchainSpace將通過Sandbox Academy,促進和連接其2600個公會和680000名玩家進入The Sandbox的虛擬世界。

今年早些時候,BlockchainSpace是最早開始與The Sandbox團隊合作的公司之一。BlockchainSpace首先專注于建設菲律賓社區,這是目前世界上最大的NFT社區之一。此前BlockchainSpace推出第一屆菲律賓主題的體素NFT藝術競賽PINASining,展示了來自世界各地的藝術家。BlockchainSpace還在The Sandbox中為菲律賓創造第一次土地體驗。玩家可以體驗乘坐馬車和吉普車,觀看當地特有的動植物,穿著菲律賓祖先的傳統服裝,所有這些都是通過為The Sandbox生成的NFT實現。所有這些體素資產將很快在BlockchainSpace即將推出的PINASining: Discover the Philippines NFT收藏品中出售,這是在The Sandbox上出售的第一個菲律賓主題NFT收藏品。[2021/12/11 7:31:52]

constGravatarRegistry=artifacts.require('./GravatarRegistry.sol')module.exports=asyncfunction(deployer){awaitdeployer.deploy(GravatarRegistry。

添加執行交易腳本,以便觸發事件3_create_gravatars.js:

IntoTheBlock:持有BTC少于一個月的地址數量減少了59%:IntoTheBlock發推表示,自今年2月以來,持有BTC少于一個月的地址數量減少了59%,隨著波動性的降低,投資活動的數量也大大減少。[2021/7/14 0:52:17]

constGravatarRegistry=artifacts.require('./GravatarRegistry.sol')module.exports=asyncfunction(deployer,network,accounts){constregistry=awaitGravatarRegistry.deployed()console.log('Accountaddress:',registry.address)awaitregistry.createGravatar('Carl','https://thegraph.com/img/team/team_04.png',{from:accounts,}。

然后執行trufflemigrate--networkropsten以便完成部署和執行createGravatar交易,控制臺里會打印出GravatarRegistry合約部署的地址,復制這個合約地址,后面在編寫subgraph需要使用到。

2.創建定義數據索引的Subgraph

TheGraph中定義如何為數據建立索引,稱為Subgraph,它包含三個組件:

Manifest清單(subgraph.yaml)-定義配置項

Schema模式(schema.graphql)-定義數據

Coinbase正式上線Tether(USDT):5月4日,美國合規交易所Coinbase正式上線Tether(USDT),投資者現在可以交易、轉賬USDT。目前Coinbase只支持ERC-20標準的USDT。在此之前,Coinbase因為合規問題兩度推遲USDT上線。2020年5月Coinbase托管業務宣布支持ERC-20USDT,但一個月后相關內容被刪除。與此同時,發行USDT的Tether公司也麻煩纏身,今年2月份Tether與紐約總檢察長糾紛和解后,Tether負面形象才有所緩解。Coinbase在今年完成上市后第9天宣布將上線USDT,但很快又宣布因為API問題再次推遲。[2021/5/4 21:22:19]

Mapping映射(mapping.ts)-定義事件到數據的轉換

后面我們將逐一介紹他們的作用及如何來編寫。

在TheGraph創建一個Subgraph空間

因為需要借助TheGraph的節點來完成數據的索引,因此我們需要在TheGraph網站)上創建一個Subgraph。

如果你有自己的私有鏈,這可以克隆Graph節點代碼,自己運行Graph節點來完成數據的索引。

如果沒有TheGraph的賬戶,可以用GitHub注冊。創建賬戶之后,進入儀表盤就可以開始通過界面創建subgraph,進入你的儀表板,并點擊AddSubgraph:

image-20210428095928210

可以為你的subgraph選擇一個圖像,定義一個名稱。完成后點擊保存,一個新的、未部署的subgraph將顯示在儀表板上。

現場 | Ether Lab CEO Kim Kyung Soo:非正規渠道的加密貨幣交易是一大問題:金色財經現場報道,12月16日,由ChainUP主辦,節點資本等聯合主辦的“Future BlockChain”全球行活動在韓國舉辦。Ether Lab CEO Kim Kyung Soo在演講中表示,現在韓國的所有加密貨幣交易所中只有頭部的幾家交易所可以通過正常途徑用法幣交易,其他所有的加密貨幣交易所都是通過非正規的賬號渠道在進行法幣交易,這是一個非常大的問題。他說,盡管有韓國國會議員提出讓政府出臺加密貨幣相關的指南,但是從政府態度來看,明年出臺相關政策可能性也不大。[2018/12/16]

開發和部署subgraph

先使用Yarn或NPM在全局安裝GraphCLI:

$npminstall-g

ID,Bytes及String是GraphQL數據類型,!表示該值不能為空。模式的定義文檔可以在這里找到:https://thegraph.com/docs/define-a-subgraph#the-graphql-schema。

定義映射(mapping.ts)

TheGraph中的映射文件定義了如何將傳入事件轉換為實體的函數。它用TypeScript的子集AssemblyScript編寫。因此可以將其編譯為WASM(WebAssembly),以更高效,更便攜式地執行映射。

需要定義_subgraph.yaml_文件中每個handler函數,因此在我們的例子中,我們需要實現函數:handleNewGravatar及handleUpdatedGravatar。

TheGraph提供了一個命令:graphcodegen可以生成解析事件的代碼及模式實體代碼,因此只需要基于生成的代碼編寫映射函數,mapping.ts定義如下:

import{NewGravatar,UpdatedGravatar}from'../generated/Gravity/Gravity'import{Gravatar}from'../generated/schema'exportfunctionhandleNewGravatar(event:NewGravatar):void{letgravatar=newGravatar(event.params.id.toHex())gravatar.owner=event.params.ownergravatar.displayName=event.params.displayNamegravatar.imageUrl=event.params.imageUrlgravatar.save(。exportfunctionhandleUpdatedGravatar(event:UpdatedGravatar):void{letid=event.params.id.toHex()letgravatar=Gravatar.load(id)if(gravatar==null){gravatar=newGravatar(id。gravatar.owner=event.params.ownergravatar.displayName=event.params.displayNamegravatar.imageUrl=event.params.imageUrlgravatar.save(。

在handler函數,我們使用事件的ID創建Gravatar實體。并使用相應的字段填充數據,最后需要.save()來存儲實體。

如何編寫映射函數,還可以參考文檔:https://thegraph.com/docs/define-a-subgraph#writing-mappings。

接下來就是把編寫好的Subgraph部署到TheGraph

3.部署Subgraph

在控制臺先用graphauth進行授權:

graphauthhttps://api.thegraph.com/deploy/

請使用你在創建Subgraph空間提示的Accesstoken。

然后使用graphdeploy進行部署:

graphdeploy--debug--nodehttps://api.thegraph.com/deploy/--ipfshttps://api.thegraph.com/ipfs/

使用完成的Subgraph名稱,我們這里是:xilibi2003/Gameplayer。

如果順利的話,可以在TheGraph的面板上觀察到subgraph索引過程,初始索引可能需要等待幾分鐘,如下圖:

subgraph索引

當索引完成后,通過GraphExplorer中的GraphQLplayground進行交互查詢:

GraphQL查詢

4.DApp前端查詢索引數據

在我們的代碼庫中,front目錄中,已經提供一個示例DApp,用來訪問數據。進入應用程序目錄,配置查詢subgraph的GraphQL端點地址:

$cdfront$echo'REACT_APP_GRAPHQL_ENDPOINT=https://api.thegraph.com/subgraphs/name//'>.env

最后,安裝DApp的依賴并啟動項目。

$yarn&&yarnstart

可以看到通過GraphQL查詢出來了3條數據:

image-20210429183042997

在React前端使用了ApolloClient來集成GraphQL查詢,如果是Vue可以使用VueApollo。

GraphQL查詢的代碼可以在front/App.js找到,這里不做詳細介紹。

參考資料

智能合約:https://learnblockchain.cn/article/1717

DEFI:https://learnblockchain.cn/article/570

TheGraph:https://thegraph.com/explorer/

儀表板:https://thegraph.com/explorer/dashboard/

定義subgraph.yaml的詳細文檔:https://thegraph.com/docs/define-a-subgraph#the-subgraph-manifest

https://thegraph.com/docs/define-a-subgraph#the-graphql-schema:_https://thegraph.com/docs/define-a-subgraph#the-graphql-schema_

AssemblyScript:https://www.assemblyscript.org/

WebAssembly:https://webassembly.org/

https://thegraph.com/docs/define-a-subgraph#writing-mappings:_https://thegraph.com/docs/define-a-subgraph#writing-mappings_

VueApollo:https://apollo.vuejs.org/guide/#become-a-sponsor

免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。

本文來源于非小號媒體平臺:

登鏈社區

現已在非小號資訊平臺發布105篇作品,

非小號開放平臺歡迎幣圈作者入駐

入駐指南:

/apply_guide/

本文網址:

/news/9921988.html

免責聲明:

1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險

2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場

上一篇:

Bitfinex一周簡報

Tags:APHGRAPGraphRAPethnographyasamethodusedethnographyofspeakingethnographersWrapped CrescoFin

DAI
關于BiKi余幣寶將于05月03日開啟第59期USDT機槍池理財的公告 (0503)_BIKI

尊敬的用戶: BiKi余幣寶將于05月03日16:30開啟第59期USDT機槍池理財,預期年化收益15%.

1900/1/1 0:00:00
燃情五月,渦輪加速贏福利_TBOS

尊敬的用戶: TBOS為回饋廣大用戶,特舉辦交易贈金活動,歡迎體驗。CoinBene實名認證用戶2021年5月6日16:00至2021年5月12日16:00活動一、交易贏20,000TBOS活動.

1900/1/1 0:00:00
人民日報:數字人民幣測試將為未來貨幣創新與市場選擇奠定堅實基礎_LIBRA

5月6日,《人民日報》刊文“全球數字貨幣加快研發”。文章表示,隨著數字化趨勢的不斷擴大,經濟運行模式、社會分工架構、產業組織邊界逐步改變,將從需求端重構金融服務模式,并對金融基礎設施產生深刻影響.

1900/1/1 0:00:00
Gemini創始人:狗狗幣貨幣供應比美元更堅固、更透明且更可預測_NAM

Gemini創始人TylerWinklevoss發推文稱:“你可以說出你對狗狗幣的任何看法,但它的貨幣供應比美元更堅固、更透明且更可預測。這才是真正的笑話.

1900/1/1 0:00:00
關于LBank近期上線CSPR(Casper)交易的公告_BAN

尊敬的LBank藍貝殼用戶:LBank藍貝殼將于2021年5月3日20:00(UTC8)全球首發CSPR(Casper).

1900/1/1 0:00:00
BHEX關于ETC3S、DASH3S、DOGE3S、WAVES3S杠桿ETF產品份額合并的公告_ETF

尊敬的社區用戶: BHEX杠桿ETF產品7x24小時交易,并且市場波動較大,本著對市場影響最小原則,在不影響用戶體驗的情況下,我們將按次數最少化原則對ETF份額進行合并操作.

1900/1/1 0:00:00
ads