//聲明版本號(程序中的版本號要和編譯器版本號一致)
pragma solidity ^0.5.17;
//合約
contract EventTest
{//狀態變量uint public Variable;//構造函數constructor() public{Variable = 100;}event ValueChanged(uint newValue); ?//事件聲明event Log(string, uint);//調用該函數,修改狀態變量的值并觸發事件function setValue(uint newValue) public {Variable = newValue;emit ValueChanged(newValue); ?//觸發事件emit Log("New_Variable = ", newValue); ?//記錄日志}}
(1)事件用于記錄在區塊鏈上的特定活動,“emit ValueChanged(newValue);”語句的作用是觸發ValueChanged事件(首先需要聲明事件)。
①觸發事件后會生成相應日志,上圖黃框就是“emit ValueChanged(newValue);”語句產生的日志,其中“form”指的是觸發事件的合約賬戶。
②事件主要是供外部應用程序監聽,外部應用程序可以監聽事件以獲取合約中特定活動的通知。
(2)日志的作用是在智能合約中記錄重要信息,“emit Log("New_Variable = ", newValue);”語句的作用就是生成一個日志(同樣需要先聲明,日志可以由字符串、整型等數據類型組成),通過以太坊區塊鏈瀏覽器或特定工具可以查看記錄的日志信息。
(3)觸發事件和記錄日志實際上是同一件事,聲明時使用關鍵字event,觸發時使用關鍵字emit,只是二者的目的不同,事件名一般按照實際行為命名,而日志常聲明為“Log”或“log”。