買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > 屎幣 > Info

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

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:希望CoinDesk拋開偏見,不要公開分享任何客戶名稱:金色財經報道,穩定幣發行方Tether在官網發文稱,在2021年達成和解后不久,CoinDesk要求根據紐約信息自由法公開披露與Tether第一份季度報告相關的材料。今天上午,紐約總檢察長辦公室向CoinDesk提供了回應文件。我們懷疑今天通過DeFi和中心化交易所對USDT的攻擊發生在將材料移交給CoinDesk的那天。盡管如此,Tether沒有什么可隱瞞的,我們對我們財務數據的準確性充滿信心。

雖然我們對政府機構發布機密數據(至少與Tether的儲備有關)的敏感性現在低于2021年,但我們仍對客戶數據保持警惕。雖然我們不能指望CoinDesk的公平報道,它經常歪曲Tether在市場上的地位以支持其主要競爭對手,但我們呼吁他們拋開偏見,不要公開分享任何過去或現在的客戶名稱,不要因此將社區中的任何人置于物理或數字風險中。[2023/6/16 21:42:47]

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。

My Ether Wallet CEO:ETH 2.0的路線圖在2020年12月正式拉開序幕:以太坊在上周四進行了一次升級,給網絡的區塊鏈帶來了一些改變。MyEtherWallet的首席執行官和創始人Kosala Hemchandra指出,倫敦升級為當前的以太坊網絡增加了大約 5 個變化;但是,我相信其中只有 2 個對日常用戶至關重要,自以太坊成立以來,有一個硬編碼的值,基本上負責確保以太坊將按時轉移到PoS或ETH 2.0。這個值負責在一定的區塊數之后使區塊難度呈指數級增長,從而使礦工無法挖掘新的區塊,他們不得不轉移到ETH 2網絡。然而,由于開發延誤,這個定時炸彈不斷被推遲,在倫敦分叉中,它將被最后一次推遲。\"

近年來,以太坊遭遇了可擴展性問題,尤其是在使用去中心化金融,即DeFi解決方案時存在的高額費用方面表現得尤為明顯。醞釀已久的以太坊2.0,即Eth2,希望為以太坊區塊鏈帶來可擴展性,其中包括轉向股權證明,或PoS,共識機制。Eth2的路線圖在2020年12月正式拉開序幕。Hemchandra指出EIP-1559是倫敦硬分叉帶來的第二個重要變化。(cointelegraph)[2021/8/8 1:42:12]

添加執行交易腳本,以便觸發事件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,}。

AEX交易所與Bithelp公益平臺達成戰略合作協議:3月20日,AEX交易所與Bithelp公益平臺達成戰略合作協議,AEX作為首批合作的交易所之一,呼吁大家積極參與公益事業,雙方將協力通過區塊鏈幫助更多人。AEX用戶參與Bithelp公益募捐活動將獲愛心積分,愛心積分可用于兌換紀念品或抵扣AEX平臺交易手續費。

Bithelp(點滴幫助)是一個基于區塊鏈和數位貨幣技術的跨國界的求助和援助平臺,致力于通過區塊鏈幫助全世界最急需幫助的人。

據悉,AEX為七年老牌交易所,業內“資訊社區+交易理財”的數字資產銀行,平臺數據公開透明,實行100%準備金制度,目前已上線“理財超市、抵押借幣、算力商城”等金融服務。[2020/3/20]

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

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

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

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

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

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

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

在TheGraph創建一個Subgraph空間

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

Tether昨日增發1.7億枚USDT:DAppTotal顯示,昨日,USDT發行方Tether在波場網絡增發價值5000萬美元的TRC20USDT,同時,在以太坊網絡增發1.2億美元的ERC20USDT。對于其中一筆6000萬美元的ERC20USDT,Bitfinex首席技術官PaoloArdoino表示:“這是一筆已授權但未發行的交易(并非真正增發),這意味著該金額將用作下一次發行請求的庫存(即下次增發的準備金)。[2020/3/18]

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

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

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),以更高效,更便攜式地執行映射。

Tether授權增發6000萬枚USDT:據Whale Alert數據,北京時間3月5日23:49,Tether公司新增發6000萬枚USDT,價值6002.7萬美元USDT。對此,Bitfinex首席技術官Paolo Ardoino表示,請注意,這是一筆已授權但未發行的交易,這意味著該金額將用作下一次發行請求的庫存。[2020/3/6]

需要定義_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:GraphRAPAPHGRAPethnographyofcommunicationFrappecoinethnographyofspeaking

屎幣
EFI:去中心化多鏈基礎設施平臺 Unifty 將舉辦 NFT 競賽_THE

鏈聞消息,去中心化多鏈基礎設施平臺Unifty將舉辦NFT競賽「TipofTheIceberg」.

1900/1/1 0:00:00
BILL:喜劇演員Bill Maher痛斥加密貨幣對環境的影響_HER

BillMaher毫不留情對從比特幣到狗狗幣的加密貨幣進行了批評,暗示整個領域都是假的,仍然需要大量的真實能量.

1900/1/1 0:00:00
TPS:Gate.io 關于完成投票和上線 Dogeswap (DOG) 交易的公告_GAT

本期投票上幣活動已圓滿結束,感謝廣大用戶的參與和支持。Gate.io投票上幣活動將持續帶來更多有潛力的優質項目,敬請期待.

1900/1/1 0:00:00
OIN:在周五11億美元的期權到期之前,熊市的目標是比特幣價格低于6萬美元_i9X Coin

比特幣的價格曾跌至53,000美元的支持水平,現在比特幣從最近的下跌中完全恢復過來。這一回升至57,500美元的舉動,使多頭從5月7日3,500BTC期權合約的負面壓力中解脫出來,該合約代表著2.

1900/1/1 0:00:00
NBA:Coinbase公布上市后首筆收購:將收購數據分析平臺Skew_filecoin幣最新消息

本文來自?Bitcoin.com、Coinbase公告,原文作者:JamieRedmanOdaily星球日報譯者|余順遂4月30日.

1900/1/1 0:00:00
DAO:DAO組織應當如何有效進行資金管理?_AVE

DAO組織在DeFi生態扮演著越來越重要的作用,其中一個重要命題則是DAO組織作為一種新事物應當如何管理其金庫資產,如今各類DAO組織管理資產超過140億美元,其管理策略的重要性愈發凸出.

1900/1/1 0:00:00
ads