以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads

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

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:

華爾街日報:86%的Tether股份由4人持有:金色財經報道,根據《華爾街日報》看到的調查文件,截至 2018 年Tether 86% 的股份由四名男子擁有。紐約總檢察長和商品期貨交易委員會2021 年調查 Tether 的文件揭示了世界上最大穩定幣的秘密發行人及不為人知的所有權結構。Tether 的 USDT 穩定幣是加密世界基礎設施的關鍵部分,它簡化了該行業的資金流動。

Tether 由前整形外科醫生 Giancarlo Devasini 和前兒童演員 Brock Pierce 領導的不同公司創立。根據華爾街日報看到的文件,Devasini曾幫助開發加密貨幣交易所 Bitfinex,現在是其首席財務官,他在 2018 年擁有 Tether 約 43% 的股份。文件顯示,Bitfinex 和 Tether 的另外兩名高管,即首席執行官Jean-Louis van Der Velde和首席法律顧問Stuart Hoegner,在 2018 年各自持有 Tether 約 15% 的股份。截至 2018 年,第四大股票持有者是一位擁有英國和泰國國籍的商人,在英國被稱為 Christopher Harborne,在泰國被稱為 Chakrit Sakunkrit,他持有了 Tether 約 13% 的股份。這四人通過自己的持股和另一家相關公司共同擁有 Tether 約 86% 的股份。[2023/2/3 11:44:33]

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

Yuga Labs CEO:正在構建互操作性“Otherside開發套件”:金色財經報道,Yuga Labs 首席執行官 Nicole Muniz 周四在里斯本年度技術會議 WebSummit 上分享了旗下元宇宙平臺 Otherside 的計劃,他表示 Yuga Labs 正在構建一個具有互操作性的“Otherside 開發套件”,可以幫助開發人員為 Otherside 構建特性和功能,并將這些功能傳輸到其他元宇宙平臺中。 Nicole Muniz 還強調,用戶在 Otherside 元宇宙中不僅能真正擁有自己的資產,還應該擁有自己的身份。此外,他透露該公司正在招聘“打造下一代互聯網”的優秀人才。(decrypt)[2022/11/4 12:16:29]

這里為了安全考慮,把助記詞和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,}。

THETA突破3.8美元關口 日內漲幅為6.76%:歐易OKEx數據顯示,THETA短線上漲,突破3.8美元關口,現報3.8024美元,日內漲幅達到6.76%,行情波動較大,請做好風險控制。[2021/2/20 17:34:46]

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

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

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

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

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

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

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

在TheGraph創建一個Subgraph空間

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

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

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

Tether在EOS網絡增發5,000萬枚USDT:據DAppTotal穩定幣專題頁面數據顯示:09月05日15時21分,USDT發行方Tether在EOS網絡增發1筆價值50,000,000美元的USDT,塊高度為:140291558,交易哈希值為:0c67c8810d6683ab9040175feedfe2c3d3d49589980ab4aac4926f96d0b8973a。截至目前,Tether在EOS網絡上的USDT總發行量已達90,251,000枚。[2020/9/5]

image-20210428095928210

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

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

聲音 | Synthetix創始人:用戶獲利超10億美元的錯誤已修復,并已回滾所有交易:Synthetix創始人發布博客文章表示,一個用戶獲利超過10億美元的錯誤已得到修復,該用戶回滾了所有交易,并換取BUG獎金。據此前報道,今晨,基于以太坊構建的合成資產發行平臺Synthetix被曝遭遇Oracle攻擊。[2019/6/25]

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:GRAPGraphRAPAPHGraphLinq ProtocolethnographersVRAP價格ethnographyinbusiness答案

比特幣行情
GAT:Gate.io“每周鯊魚鰭”第14期 BTC鯊魚鰭(6天)理財產品掛鉤價格調整公告

為豐富理財產品種類,為用戶提供更多類型的理財產品收益,Gate.io已于5月1日12:00上線第14期BTC鯊魚鰭理財產品,年化收益為浮動利率3-16%,總額度300BTC,鎖倉期限6天.

1900/1/1 0:00:00
GAT:Gate.io Startup首發項目Orao.Network (ORAO) 上線交易的公告

Gate.io將于2021年05月04日02:00上線Orao.Network(ORAO)交易。OraoNetwork是基于波卡的原生預言言機服務,可以自定義數據饋送.

1900/1/1 0:00:00
狗狗幣:楚悅辰:5.5以太坊相對于比特幣更具潛力,未來表現也更加出色

以太坊2.0在2020年年底上線,交易吞吐量、可擴展性和安全性都隨之升級,這也被視為以太坊價格大漲的重要原因.

1900/1/1 0:00:00
DEFI:DeFi周刊 | DeFi總鎖倉量突破1100億美元 創歷史新高

DeFi數據 1、DeFi總市值:1328.5億美元DeFi總市值及市值前十幣種排名數據來源Coingecko2、過去24小時去中心化交易所的交易量:37.

1900/1/1 0:00:00
BTC:繼續出貨長線幣ETC,開始上車NKN

1、政策及市場指標 資金繼續流入,但是幅度比較小,難以使市場繼續走高,近期只能保持高位盤整。 2、行情分析 ◆BTC 比特幣昨天上攻回落,今天整體上還是以回落為主,多頭后勁并不是很足,而且600.

1900/1/1 0:00:00
USD:算法穩定幣FEI迎來“出獄日” 1分鐘學會如何逃離

北京時間4月30日,算法穩定幣協議FEI正式執行了FIP-2贖回方案,這允許FEI持有者以0.95美元的價格將FEI兌換成ETH.

1900/1/1 0:00:00
ads