Solidity中的事件(Event)的结构与用法

event的简单例子

在Solidity中,事件(Event)是一种特殊的结构,用于记录区块链上的活动,类似于日志记录。事件可以被合约内的函数触发,并且可以被外部监听者(例如用户界面或后端服务)监听。事件的主要用途是提供一种方式,让外部系统能够接收到合约内部状态变化的通知。

事件的使用通常包括两个步骤:

  • 声明:在合约中声明一个或多个事件。
  • 触发:在合约的函数中使用emit关键字来触发事件。
    以下是事件声明和触发的一个简单示例:
// 声明事件
event PasswordSet(address indexed user, string password);

// 触发事件的函数
function setPassword(string memory newPass) public {
    require(msg.sender == s_owner, "Only owner can set password");
    s_password = newPass;
    emit PasswordSet(msg.sender, newPass); // 触发事件
}

在这个示例中,PasswordSet事件有两个参数:一个是address类型的user,被标记为indexed,表示可以被索引;另一个是string类型的password,没有被索引。当setPassword函数被调用且条件满足时,会触发PasswordSet事件,并将调用者地址和新密码作为参数传递。

在Solidity中,事件的参数可以被标记为indexed或非索引(non-indexed)。这两种参数的主要区别在于它们如何被存储和查询:

被索引的参数(Indexed Parameters)

  1. 存储方式:被索引的参数的哈希值被存储在区块的日志主题(Topics)中。由于主题的数量限制为4个(前三个为索引参数,第四个可以是任意类型),因此只有前三个参数可以被标记为索引。
  2. 查询效率:由于索引参数的哈希值被存储在日志主题中,它们可以被非常快速地查询。这意味着你可以使用这些参数的值来过滤事件,而无需遍历所有的日志条目。
  3. 使用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值