編寫智能合約時,通常狀態的變化是通過觸發一個事件來表達,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 Sandbox上推出元宇宙:12月14日消息,The Sandbox發文稱已與《福布斯》雜志達成合作,后者將在The Sandbox上推出與Polygonal Mind Creative Studio合作開發的元宇宙,用戶可以在其中了解福布斯的歷史、創始人Malcolm Forbes以及了解30 Under 30 Gallery等內容。若用戶購買了福布斯獨家的可穿戴設備,則可獲得獨特的配飾。該元宇宙將于北京時間12月14日23:00到12月28日23:00開放,并將總計提供5萬枚SAND獎勵。[2022/12/14 21:44:17]
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:
CoinDesk加入法庭案件尋求獲得紐約州政府的Tether文件:金色財經報道,CoinDesk已加入紐約總檢察長辦公室(NYAG)與Tether及其母公司之間的法律程序,作為新聞機構努力闡明支持784億美元穩定幣儲備的一部分。CoinDesk在1月4日提交給法院的一份備忘錄中說:“披露所要求信息的公共利益遠遠超過Tether可能擁有的任何私人利益。”2021年6月,CoinDesk向NYAG提交了信息自由法(FOIL)請求,要求提供辦公室在調查Tether和Bitfinex期間獲得的文件,兩家公司于當年早些時候以1850萬美元和解。FOIL請求還要求提供Tether在2021年5月提交給NYAG的副本,當時穩定幣發行人首次公布了其儲備的明細。助理總檢察長JamesB.Cooney于12月6日申請駁回Tether的請愿書。(coindesk)[2022/1/5 8:25:34]
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需要使用到。
Tether CEO已將其推特帳戶刪除:10月8日消息,在彭博社報道質疑該公司的儲備支撐后,Tether首席執行官Jean-Louis van der Velde's刪除了他的Twitter帳戶。Tether做出了回應,稱該報告具有誤導性,并表示USDT有完全的支撐。Tether對這篇文章的回應是嚴厲的,稱彭博社使用可疑來源來“適應預先包裝和預先確定的敘述”。在過去12個月,Tether已采取措施提供其儲備的一些證據。它已經發布了一些儲備證明,盡管市場上的一些投資者認為這不足以平息擔憂。
目前SEC尚未發出正式通知對Tether進行調查。(Beincrypto)[2021/10/8 5:48:17]
2.創建定義數據索引的Subgraph
TheGraph中定義如何為數據建立索引,稱為Subgraph,它包含三個組件:
Manifest清單(subgraph.yaml)-定義配置項
Schema模式(schema.graphql)-定義數據
Mapping映射(mapping.ts)-定義事件到數據的轉換
后面我們將逐一介紹他們的作用及如何來編寫。
在TheGraph創建一個Subgraph空間
因為需要借助TheGraph的節點來完成數據的索引,因此我們需要在TheGraph網站)上創建一個Subgraph。
如果你有自己的私有鏈,這可以克隆Graph節點代碼,自己運行Graph節點來完成數據的索引。
如果沒有TheGraph的賬戶,可以用GitHub注冊。創建賬戶之后,進入儀表盤就可以開始通過界面創建subgraph,進入你的儀表板,并點擊AddSubgraph:
500萬USDT自Tether Treasury轉至一未知地址:據Whale Alert監測,北京時間8點59分,500萬枚USDT自Tether Treasury轉至一未知地址。[2020/3/24]
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。
TheGraph提供了一個命令:graphcodegen可以生成解析事件的代碼及模式實體代碼,因此只需要基于生成的代碼編寫映射函數,mapping.ts定義如下:
動態 | Tether Treasury向未知地址轉出500萬枚USDT:據Whale Alert數據,北京時間16:00:53,Tether Treasury(0x5754開頭地址)向未知地址(0x0c77開頭)轉入500萬枚USDT,價值約502.3美元。交易哈希值為:0xfc5351d6f398f2e5321f572a46d5333af76cd3159a3d26ac858d66d1e1af0f37。[2020/2/15]
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:RAPGraphGRAPAPHWrapped CentrifugeHedera Hashgraphethnographyinbusiness答案
尊敬的虎符用戶: SLP將部署新合約,為了配合項目方做好換幣的相關準備工作,虎符現已暫停SLP充提。待升級完成后我們將第一時間恢復,具體時間請留意虎符的最新公告.
1900/1/1 0:00:00近日ConsenSys發布的第一季度DeFi報告指出,DeFi的持續增長與以太坊上穩定幣的供應相應增加.
1900/1/1 0:00:00金色周刊是金色財經推出的一檔每周區塊鏈行業總結欄目,內容涵蓋一周重點新聞、行情與合約數據、礦業信息、項目動態、技術進展等行業動態。本文是項目周刊,帶您一覽本周主流項目以及明星項目的進展.
1900/1/1 0:00:00本文來自知名投資機構VariantFund投資人SpencerNoon推特,并由鏈捕手編譯。根據Etherscan的數據,以太坊地址數的累計數量已經超過了1.1?億個.
1900/1/1 0:00:00基本面:截止目前為止,今天BTC是以資金流入為主,而ETH有資金流出為主,最近資金流向不一,大家還是要小心行情下行.
1900/1/1 0:00:001.關注公眾號:道說區塊鏈2.后臺回復:電子書3.獲取《DeFi實戰投資方法論》電子書昨天以太坊社區的開發者發表了一個在社區引起廣泛討論的話題.
1900/1/1 0:00:00