iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

影片教學

Yes

主要內容

事件(Event)是一種特殊的機制,用於記錄智能合約中的重要狀態變化或操作。事件是以太坊區塊鏈上的一種日誌抽象,具有以下兩個主要特點。

1.響應性

應用程序可以通過以太坊的 RPC 接口訂閱和監聽事件,從而及時響應智能合約中的狀態變化。

2.經濟性

與鏈上存儲數據相比,事件是一種更經濟的方式來存儲和傳遞信息,因為每個事件日誌記錄約耗費 2000 Gas,而鏈上存儲一個新變數至少需要 20000 Gas。

聲明事件

要聲明一個事件,你需要使用 event 關鍵字,然後指定事件的名稱和事件參數,包括參數的類型和名稱。

觸發事件

事件通常在智能合約的函數內部被觸發(emitted)。

以太坊虛擬機日誌(Log)
在以太坊虛擬機(EVM)中,事件的日誌記錄以日誌(Log)的形式存儲。每個事件日誌記錄都包括兩個部分。

1.主題(Topics)

事件日誌的第一部分是主題數組,用於描述事件。主題數組的長度不能超過 4。其中,第一個元素是事件的簽名(哈希)。

此外,主題中還可以包含最多 3 個帶有 indexed 標記的參數。這些參數可以理解為事件的索引 "鍵",方便之後進行搜索。每個帶有 indexed 標記的參數大小固定為 256bit(32byte),如果參數過大,則會自動計算哈希值並存儲在主題中。

2.數據(Data)

事件中不帶 indexed 標記的參數會被存儲在數據(data)中。數據可以理解為事件的 "值",這些參數不能直接檢索,但可以存儲任意大小的數據。因此,數據通常用於存儲複雜的數據結構,如數組和字符串等,因為這些數據超過 256bit,即使存儲在事件的主題中,也會以哈希的方式存儲。此外,相比於主題,數據的存儲成本較低

相關連結

WTF Solidity Event
keccak256 online
Etherscan


上一篇
Solidity 入門走到飛🚀-【Day11】構造函數 & 修改器
下一篇
Solidity 入門走到飛🚀-【Day13】繼承 - is
系列文
30天讓你從【零基礎】掌握智能合約 Solidity 入門走到飛30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言