推
注冊以太坊過濾器(filter),監(jiān)聽合約事件,當(dāng)有被監(jiān)聽事件發(fā)生時以太坊節(jié)點向客戶端推送(push)包含事件數(shù)據(jù)的log。
需要客戶端和以太坊節(jié)點之間是雙工的連接,比如tcp socket,unix socket,ipc等,不支持http連接。
定位精準(zhǔn),只會獲取我們關(guān)心的數(shù)據(jù)
無須再次確認交易的狀態(tài)是否成功,因為有事件發(fā)出則交易一定是成功的。
拉
客戶端采用定時輪詢的方式查詢以太坊節(jié)點是否有更新的塊生成,如果有則根據(jù)塊號獲取塊數(shù)據(jù),遍歷其中的交易,尋找我們感興趣的交易,比如是調(diào)用特定的ERC 20合約,是否是某個用戶的轉(zhuǎn)賬等。
靈活,可以從任意塊號開始,可重試,支持http,不要事先在合約中聲明事件
從區(qū)塊中獲取交易后,仍然需要再次檢查交易的收據(jù)(receipt),以確定交易是成功還是失敗。
receipt, err := c.deployBackend.TransactionReceipt(ctx, common.HexToHash(tx.Hash))
ntx.Success = (receipt.Status == 1)
選擇
傾向于拉的模式,能獲得較多的數(shù)據(jù),連接方式不受限制