以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads
首頁 > BNB價格 > Info

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

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:

The Graph將Gnosis鏈添加到其去中心化區塊鏈索引協議中:金色財經報道,?The Graph的組織Graph基金會周四表示,Gnosis 鏈(GNO)將是以太坊以外第一個在The Graph Network上得到支持的鏈,其代幣是GRT。該基金會還宣布了一項900萬美元的激勵基金,以幫助引導該網絡。[2022/8/26 12:50:21]

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:

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

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

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,}。

Yuga Labs元宇宙Otherside已啟動KYC錢包預批準:4月30日消息,Yuga Labs元宇宙項目Otherside在其官方社交媒體賬戶發文稱用戶現在可以預批準KYC錢包,然后才可以在otherside.xyz使用ApeCoin,預批準將開放至美國東部時間4月30日晚上九點,屆時將開始NFT鑄造。

Otherside提醒用戶必須先批準錢包才能鑄造(連接錢包點擊預批準按鍵,然后簽署交易即可),如果在鑄造前一刻批準可能面臨網絡擁堵,此外預先批準可以節省gas費用。不過,BAYC/MAYC持有者無需預批準操作,但如果要鑄造額外Otherside則需要進行預批準錢包。此外,Otherside提醒otherside.xyz是唯一預批準錢包的地址,其他任何鏈接都涉嫌欺詐。[2022/4/30 2:42:23]

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

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

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

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

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

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

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

在TheGraph創建一個Subgraph空間

公鏈Ether Dimension主網礦池Super Mining即將開啟內測:據EtherV Foundation(以太基金會)官方公告,其公鏈Ether Dimension主網礦池Super Mining將于韓國時間2020年12月7日P.M:19:00(北京時間P.M:18:00)整,正式開啟Super Mining ?APP內測。

Ether Dimension是由美國EtherV Foundation等多家投資基金機構共同打造。Ether Dimension是一條以以太坊核心底層技術并加以升級革新,采用PoW+PoS共識機制,其生態體系匯集了:挖礦激勵、邊緣計算、設計渲染、商業應用、金融消費、匿名社交等六維一體的生態公鏈。其主網礦池Super Mining現于韓國時間2020年12月7日P.M:19:00(北京時間P.M:18:00)整,面向中文自治社區正式開啟內測并開啟礦機預售。[2020/12/7 14:25:24]

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

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

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

image-20210428095928210

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

動態 | 律師敦促法官停止強制Bitfinex和Tether產出NYAG所要求文件:Bitfinex和Tether的律師在一封新信件中稱,他們僅在為紐約總檢察長辦公室(NYAG)尋找文件上就花費了50萬美元。在周二向紐約最高法院提交的信中,Steptoe和Johnson LLP的律師Jason Weinstein和Charles Michael以及Morgan,Lewis和Blockius LLP的David Miller和Zoe Phillips敦促法官Joel M. Cohen立即反對強迫Bitfinex和Tether產出NYAG要求的所有文件。據悉。Cohen此前曾裁定Bitfinex和Tether需要保留并交出這些文件的一部分,并保留其余的NYAG禁令。(CoinDesk)[2019/7/31]

開發和部署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。

分析 | Tether是否在巴哈馬銀行有18億美元存款或需比對央行四季報數據:據公眾號“假裝在花街”,巴哈馬央行發布的10月份財報中,“外匯交易”、“國內居民存款”、“M2”、”外匯儲備”這幾個指標無法反映非居民外幣存款的變化。而在該行季報中有非居民外幣存款這項統計。因此無法僅憑上述幾個數據來判定Tether是否在巴哈馬的銀行有18億美元存款。三季報里顯示7月增加的非居民外幣存款很快下降,至9月已回到之前的水平,推測可能tether又將這筆錢轉走。目前無法斷定tether發布的聲明是偽造的,要等到巴哈馬央行今年的四季報出來才能判斷,理論上公布時點可能要等到2019年3月。[2018/12/26]

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:APHGRAPGraphRAPSeraphiumethnographyGraphLinq Protocolwrapped SIENNA (ERC20)

BNB價格
BHEX關于恢復QTUM充值和提現的公告_HEX:TPS

尊敬的社區用戶: QTUM節點升級完畢,BHEX現已恢復QTUM的充值和提現。暫停期間給您帶來的不便,敬請諒解! 風險提示: 數字資產是創新的投資產品,價格波動較大,請您理性判斷自己的投資能力,

1900/1/1 0:00:00
4.30晚間行情:五一假期該如何操作_NER:BTCVB

文章系金色財經專欄作者幣圈北冥供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別防上當.

1900/1/1 0:00:00
每日行情解讀 | BTC鏈上支撐變強,后市預計高位震蕩_USDT:globalusdtoken

南美洲第二大公司MercadoLibre宣布接受比特幣付款,美上市公司MicroStrategy在2021年第一季度購買了約20857枚比特幣.

1900/1/1 0:00:00
BooBanker項目介紹_BOO:ECT

您好,DeFi愛好者!歡迎來到我最近進行的新評論!請訪問我們的網站,以了解如何使用QDeFiRating風險評分算法,來幫助您賺的更多!訂閱我們的B站頻道,以觀看實用的教程和精彩訪談.

1900/1/1 0:00:00
比特幣BTC十字星插針,整體上仍然以多為主_DIN:比特幣交易騙局

1、政策及市場指標? 貪婪指數上升了17點,突破了60達到68,情緒剛起來,還會繼續瘋狂。其他數據有所上升,但是變化不是很大.

1900/1/1 0:00:00
老崔說幣:比特幣承壓下行,牛市結束了?_NFT:DEP

大家好,我是你們的朋友老崔說幣lcsb18888,老崔說幣公眾號同步專注數字貨幣行情分析,爭取為廣大幣友傳遞最有價值的幣市信息,歡迎廣大幣友的關注與點贊.

1900/1/1 0:00:00
ads