以太坊開發(fā): web3.js1.0.0事件監(jiān)聽

在進行中心化錢包開發(fā)過程中,需要對數(shù)字貨幣轉賬進行監(jiān)聽并作出相應處理,在進行監(jiān)聽過程中遇到了一些坑,積累了一些經驗,也有一些需要解決的問題,分享出來互相交流。

一、監(jiān)聽事件不生效

官方文檔監(jiān)聽

以上是官方文檔的用法,理論上說運行后服務會持續(xù)運行維持連接,結果是運行后直接結束,無報錯出現(xiàn);由于網上搜索可以搜到監(jiān)聽的各種寫法,如contract.watch,myContract.Transfer().on()等,所有我把各種方式都試過了一遍,都是同樣的結果。

經過一遍遍嘗試和重寫,發(fā)現(xiàn)error必須要打印才會報錯,這也是我的一個疏忽,經過打印發(fā)現(xiàn)問題出在web3的provider上,web3的監(jiān)聽只支持WebsocketProvider,不支持HttpProvider(IpcProvider也不支持)

報錯信息

在此,直接改用WebsocketProvider即可,由于我使用的是第三方服務infura,提供了websocket連接,可直接使用,修改以后可以正常進行監(jiān)聽。


二、websocket連接不穩(wěn)定

監(jiān)聽連接空閑一段時間后會失效:大概空閑10-30分鐘后,如果再次有事件發(fā)生,有很大幾率無法監(jiān)聽到,infura官網上也有相應的說明,給出了大概的解決方案,即通過定期發(fā)送請求保證連接不空閑過長時間,由于沒有具體的案例方法,表示無從下手。

通過查閱一些資料之后,可以這樣理解:由于使用的第三方服務進行連接,連接時經過了很多道路由,如果要保持連接,就需要中間經歷的所有路由無障礙,空閑一段時間之后,部分路由會認為這個連接已經失效而斷開,這種斷開并不會有任何提示,所以導致上述結果。如果采用本地服務可能沒有這個問題(是猜想,并未驗證)。

為了解決這個問題,我采取定時重啟服務的方式維持連接,并開啟多個服務進行監(jiān)聽和返回數(shù)據。


以上是我在web3.js進行事件監(jiān)聽時踩過的坑,第二個問題還沒有得到完美的解決,如有不同意見,可互相交流分享。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,939評論 1 92
  • 上一篇:以太坊Solidity開發(fā)入門(宗師篇) 第1章: 介紹 Web3.js 完成第五課以后,我們的僵尸 DA...
    那個大螺絲閱讀 2,445評論 1 10
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • 23
    暢哥哥呀閱讀 206評論 0 4
  • 我評價一場培訓的價值,一般有三條標準, 1,高效,是否惜我時間? 2,實用,是否對我有用? 3,用心,是否打動我心...
    于軼閱讀 392評論 2 1

友情鏈接更多精彩內容