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);
}
}