事件Events
Solidity 事件是EVM的日志功能之上的抽象。日志是不存在区块链上的,通过event可以记录链上发生的事情,并且通过日志的形式显示出来。
事件在合约中可被继承。当他们被调用时,会使参数被存储到交易的日志中 —— 一种区块链中的特殊数据结构。 这些日志与地址相关联,被并入区块链中,只要区块可以访问就一直存在(现在开始会被永久保存,在 Serenity 版本中可能会改动)。 日志和事件在合约内不可直接被访问(甚至是创建日志的合约也不能访问)。
事件允许记录到以太坊区块链。事件的一些用例包括:
侦听事件和更新用户界面
一种廉价的存储形式
下面是一个案例
contract Event{
event Log(address indexed sender, string message);//indexed可以理解为按照顺序排列的
event AnotherLog(address indexed sender01, string message01 , uint _i);
event EmptyLog();
function test() public {
emit Log(msg.sender ,"Hello World");
emit Log(msg.sender , "Hello Evm");
emit AnotherLog(msg.sender, "test another" , 3);
emit EmptyLog();
}
}
上述例子中,定义了三个事件Log,AnotherLog,EmptyLog
事件声明:
最多可以索引 3 个参数。
索引参数可帮助您按索引参数筛选日志
当函数test运行时,随即出发事件Log,AnotherLog,EmptyLog并将对应的值通过日志的形式输出出来。
下面是运行结果