30事件

事件是一种记录当前智能合约运行状态的方法

不体现在区块链中

体现在区块链浏览器上或者交易的log里面

通过事件可以查看改变的状态

事件名称大小字母开头

调用事件的function也是一个写入方法(改变链上状态),不能被标记为pure或者view

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

contract Event{
    event Log(string messsage,uint val);

    function example() external {
        emit Log("foo", 7);
    }
}

indexed标记过的变量可以在链外进行搜索查询

用web3.js等工具可以进行查询

一个event中可以有很多变量,但是indexed标注的变量最多有三个;

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

contract Event{
    event Log(string messsage,uint val);
    event IndexedLog(address indexed sender,uint val);
    function example() external {
        emit Log("foo", 7);
        emit IndexedLog(msg.sender, 7);
    }

    event Message(address indexed _from, address indexed  _to, string message);

    function sendMessgae(address  _to,string calldata _message) external {
        emit Message(msg.sender, _to, _message);
    }
}