26-Solidity8.0-event事件

314 阅读1分钟

事件是以太坊虚拟机(EVM)日志基础设施提供的一个便利接口。当被发送事件(调用)时,会触发参数存储到交易的日志中);

触发一个事件使用emit;

触发后的事件记录会存储在区块链上。

当触发事件后,在remix控制台之上会出现事件的记录。

from:代表合约地址

topic:代表的是事件的唯一标示,其本质也是hash函数,如在此例子中,为keccak256 (eve(string))的结果。

event:代表事件的名字

args:参数以及长度

image.png

image.png

源码:

pragma solidity ^0.8.7;

contract Enum{
    event Log(string message, uint val);
    //up to 3 index 最多三个索引
    event IndexedLog(address indexed sender, uint val);

    function example() external {
        emit Log("foo",1234);
        emit IndexedLog(msg.sender, 789);
    }

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

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

}