跳至主要內容

使用事件記錄智能合約的資料

智能合約
Remix
Solidity
事件
中階
jdourlens
2020年4月3日
3 分鐘閱讀

在 Solidity 中,事件是智能合約可以觸發的發送訊號。去中心化應用程式 (dapp) 或任何連接到以太坊 JSON-RPC API 的事物,都可以監聽這些事件並採取相應的行動。事件也可以被索引,以便日後可以搜尋事件歷史記錄。

事件

在撰寫本文時,以太坊區塊鏈上最常見的事件是 Transfer 事件,當有人轉帳代幣時,ERC-20 代幣就會發出該事件。

event Transfer(address indexed from, address indexed to, uint256 value);

事件簽章宣告在合約程式碼內部,並且可以使用 emit 關鍵字發出。例如,transfer 事件會記錄誰發送了轉帳(from)、發送給誰(to)以及轉帳了多少代幣(value)。

如果我們回到我們的 Counter 智能合約,並決定在每次數值更改時進行記錄。由於這個合約不打算被部署,而是作為透過擴展來建立另一個合約的基礎:它被稱為抽象合約。在我們的計數器範例中,它看起來會像這樣:

請注意:

  • 第 5 行:我們宣告了我們的事件及其包含的內容,即舊數值和新數值。

  • 第 13 行:當我們遞增 count 變數時,我們會發出該事件。

如果我們現在部署合約並呼叫 increment 函數,我們會看到,如果您點擊名為 logs 的陣列內部的新交易,Remix 將會自動顯示它。

Remix screenshot

日誌對於除錯您的智能合約非常有用,但如果您建立供不同人使用的應用程式,它們也很重要,並且可以更輕鬆地進行分析,以追蹤和了解您的智能合約是如何被使用的。由交易產生的日誌會顯示在熱門的區塊瀏覽器中,例如,您也可以使用它們來建立鏈下腳本,以監聽特定事件並在事件發生時採取行動。

頁面最後更新: 2026年3月3日