Events

在 nodejs 後端使用 ethersjs contract.on 時錯過的事件

  • February 22, 2022

我正在使用帶有 Infura 和 etherscan API 密鑰的預設 ethersjs 提供程序來偵聽 nodejs 後端中帶有 contract.on(event, listener) 的契約事件。它錯過了一些事件(比如說其中的 20%)。例如:它在塊 29360900 擷取一個事件,在塊 29360920 錯過一個事件,並在塊 29361056 擷取下一個事件。在我的情況下,我需要幾乎立即將每個新發出的事件保存在後端,因此要在一堆塊不是一種選擇。

有人可以提出一個可能的解決方案嗎?

我想出的最佳解決方案是:

  1. 有人在應用程序的前端部分執行交易。
  2. 交易被挖出後,等待 3 秒,以 tx 雜湊作為數據向後端發起 HTTP。
  3. 伺服器檢查它是否已經使用此雜湊保存了一個 tx,如果沒有:
  4. 後端檢查交易是否有效(檢查特定事件的日誌和合約地址)。如果有效:
  5. 將事務保存在數據庫中

你用的是什麼網路?我在 ropsten 上收聽事件沒有任何問題,在多邊形孟買也沒有成功。我還沒有找到多邊形孟買的解決方案,我想知道這個問題是否與節點的功能(例如 Infura v Alchemy)和/或網路有關。

引用自:https://ethereum.stackexchange.com/questions/119481