Solidity 事件 Event

Soliddity Event 事件是以太坊虚拟机(EVM)日志基础设施提供的一个便利接口。

当被发送事件(调用)时,会触发参数存储到交易的日志中。这些日志与合约的地址关联,并记录到区块链中。

区块链是打包一系列交易的区块组成的链条,每个交易“收据”会包含0到多个日志记录,日志表明着智能合约所触发的事件。

Event 语法

在 Solidity 代码中,使用 event 关键字来定义一个事件 Event,语法如下:

event EventName(<parameter list>);

在 Solidity 代码中,使用 emit 关键字来触发一个事件 Event,语法如下:

emit EventName(<parameter list>);

Event 示例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Envent {
  // 定义 event  
  event Log(string, uint);

  function operations() external{
    // 触发 event
     emit Log("Info", 123);
  }  
} 

Event indexed

事件 Event 还有一种特殊形式 event indexed,也就是索引事件,语法如下:

event EventName(TypeName indexed varibleName....);

事件中 indexed 标记过的参数,可以在链外进行搜索查询。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Envent {
  // 定义 event  
  event Log(address indexed, string);

  function operations() external{
    // 触发 event
     emit Log(msg.sender, "Info");
  }  
} 

一个事件中 indexed 标记过的参数最多有 3 个。

记录区块链的日志,可以使用状态变量,也可以使用事件 Event,但 Event 使用的 gas 费比状态变量低。

下一章:Solidity 不可变量 immutable

Solidity immutable 是另一种常量的表达方式。与常量类似,但是不必硬编码,可以在构造函数时传值,部署后无法改变。immutable 不可变量同样不会占用状态变量存储空间,在部署 ...