Events
如何使用 ethers.js 監聽合約事件?
我需要監聽特定的合約事件,並在事件發出後執行一些任務。我沒有在 ethers.js 文件上找到合適的文件。
誰能告訴我如何使用 ethers.js 繼續監聽我的合約事件?
此答案假設您了解如何使用乙太幣連接到合約。
您的問題指定偵聽要發出的事件,並基於此執行任務。
這是 Ethers v5 文件的連結,我們將在下面進行擴展:https ://docs.ethers.io/v5/api/providers/provider/#Provider–events
基本上,該
on
功能就是您要尋找的功能。使用提供者,您可以設置一個on
在發出特定事件時觸發某事。on
這將在區塊鏈上發出該事件時觸發回調(函式中的第二個參數)。如果您希望on
僅在呼叫特定合約的事件時觸發,則需要使用過濾器 - 提供者將在任何合約發出此事件時觸發回調。如果您查看上面 v5 文件連結中的範例(至少現在 22/09/2020),底部有一些如何使用過濾器的範例(通用過濾器或主題過濾器 - 我們將討論第一個)。基本上:
filter = { address: THE_ADDRESS_OF_YOUR_CONTRACT, topics: [ // the name of the event, parnetheses containing the data type of each event, no spaces utils.id("Transfer(address,address,uint256)") ] } provider.on(filter, () => { // do whatever you want here // I'm pretty sure this returns a promise, so don't forget to resolve it })
上面的連結中有更多關於如何過濾以及過濾內容的詳細資訊,但這是基本的建構塊。我希望這有幫助!
更新:根據評論,我想我應該添加
on
也可以與契約對像一起使用。如果你有一個代表合約的變數(我們稱之為contract
),你也可以把 an 掛on
在它上面。這是 v4 文件中的一個部分的連結,其中有一個範例(至少到目前為止,v5 文件中還沒有) - 向下滾動到“監聽事件”程式碼範例。它具有相同的格式,您可以為第一個參數傳遞事件名稱或過濾器,然後可以編寫一個函式回調作為第二個參數。這只會從contract
.