关于solidity:Solidity-之事件events篇

39次阅读

共计 1075 个字符,预计需要花费 3 分钟才能阅读完成。

Solidity 之事件 (events) 篇

Solidity 的事件 (events) 是在 EVM(虚拟机) 上的 logging 性能的抽象化实现。利用能够订阅并且监听客户端的 RPC 调用。
事件和日志对 ETH 来说十分的重要, 因为它们能够减少智能合约和用户之间的交互。事件不便了 EVM 上 logging 性能的应用。
事件上的参数被存储到交易的日志中,这是 ETH 链上的一种非凡的数据格式。

在 solidity 中的事件是什么?

在传统的 web 开发当中,服务端的返回通过回调的形式下发给前端。在 ETH 中,当一笔交易被提交之后,智能合约能够触发事件并且在链上记录日志,之后前端就能够根底解决前面的内容了。

怎么样来应用事件?

事件有 3 中次要的应用场景

  • 智能合约给用户的返回值
  • 异样触发
  • 更便宜的数据存储

在 solidity 中如何定义事件?

  • 事件在函数内部定义
  • 事件名必须和函数名称有所辨别
  • 事件名称必须是大写
  • 为了缩小混同事件名称至多得 2 个字母和函数名称不一样

如何来应用事件

在函数外部通过 emit 关键词,前面跟上事件的名称和事件所需的参数(如果有的话)。

事件被存储到什么中央

在 ETH 链上,每笔交易都附上了收据,收据上又蕴含了 0 条或者多条的日志。日志内容展示了智能合约中触发的事件的后果。
所以正因为事件存储到日志条目中,所以它们扭转了状态。

匿名事件

在 solidity 中事件能够是匿名的。默认状况下所有的事件都会有一个主题, 来自定义时候的函数名称。应用 anonymous 来记录一个没有主题的事件。匿名事件也会成为 ABI 的一部分。

event Message(
    address _recipient,
    string _message
) anonymous;

匿名事件的应用老本更低。然而匿名事件不能通过名称去筛选,只能通过合约地址。

demo

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

contract Event {
    // Event declaration
    // Up to 3 parameters can be indexed.
    // Indexed parameters helps you filter the logs by the indexed parameter
    event Log(address indexed sender, string message);
    event AnotherLog();

    function test() public {emit Log(msg.sender, "Hello World!");
        emit Log(msg.sender, "Hello EVM!");
        emit AnotherLog();}
}

正文完
 0