1.Solidity 事件是什么?

在 Solidity 中,事件是合约的一种函数,用于通知外部应用程序或区块链的其他部分特定操作已成功执行或失败。事件实际上是一个 EVM 的日志记录机制,它允许你将任何需要的数据写入区块链,并使其可查询。

事件是被触发的状态变化信号,以便外部应用程序可以侦听网站的活动并更新相应的用户界面。例如,当用户向智能合约发送资金时,通过 Solidity 事件,智能合约可以触发事件来通知外部应用程序,使其在交易成功后更新UI。

2.Solidity 事件的定义和代码示例

Solidity 事件类似于函数,但有一些区别。事件不返回任何值,而是纯粹地使用日志记录系统。下面是一个演示 Solidity 事件的基本定义和示例代码:

pragma solidity ^0.8.0;contract EventExample {event NewUser(address user, string name);function addUser(string memory name) public {emit NewUser(msg.sender, name);}
}

在上述示例代码中,我们在 Solidity 智能合约中定义了一个名为 EventExample 的事件,该事件包含两个参数:address user 和 string name。 NewUser 事件本质上是一个消息,记录了用户地址和用户名。

同时,在定义了 NewUser 事件后,我们创建了名为 addUser 的函数。在该函数中,我们可以使用 emit 关键字触发 NewUser 事件,并将指定参数传递给事件。

3.Solidity 事件的用例

在开发智能合约中。事件可以应用于多种场景,下面我们来详细看一下具体可以用到哪些地方

3.1监听资金转移

当用户向合约发送money时,通过 Solidity 事件,合约可以触发事件并通知外部应用程序,从而使其在交易成功后更新 UI。

/**
address indexed from  address是参数类型  indexed是参数名称 form是交易的金额来自谁
address indexed to  to to是交易的金额给谁
uint256 value value是交易金额
*/
event Transfer(address indexed from, address indexed to, uint256 value);function transfer(address to, uint256 value) public {// 转账操作//msg.sender是发送者//to 是接受者//value是交易金额emit Transfer(msg.sender, to, value);
}

3.2监听合约状态变化

合约状态发生变化时,可以使用 Solidity 事件来通知外部应用程序,并在变化后更新 UI。
·

  • 比如我们在发生交易时候,内部变量会发生变化,这就可以当作一个状态改变。
event StateChanged(uint256 newState);function setState(uint256 newState) public {// 设置合约状态emit StateChanged(newState);
}

3.3监听合约错误

当 Solidity 合约发生错误时,可以使用 Solidity 事件来记录错误消息,以便开发人员在之后进行调试和测试。

  • 比如我们在发生转账的时候,账户余额+转账金额<账户余额,这个时候就会报错
event Error(string message);function setError(string memory message) public {// 处理错误emit Error(message);
}

4.Solidity 事件的注意事项

在使用 Solidity 事件时,需要注意以下几点:

  • 在定义事件时,需要注意定义事件所包含的参数及其顺序。
  • 在触发事件时,需要调用 emit 方法,并传递事件的所有参数。
  • 事件不是合约函数,因此不能在智能合约内部调用事件。
  • 事件发送的输出数据会被记录在区块链的日志中,因此需要小心处理敏感信息。
    总之,Solidity 事件是一种非常有用的工具,可以让 Solidity 开发人员更轻松地执行各种操作,并与外部应用程序进行交互。通过正确地使用事件,您可以使您的智能合约更易于开发、测试和维护。

Solidity之事件相关推荐

  1. 区块链智能合约solidity的中的一些关键字

    目  录 pragma mapping msg对象 block对象 contract constructor struct 数据地址 地址类型 address payable revert 以下场景使 ...

  2. 基于centos7.0+mono+jexus配置https(阿里云服务器最全配置jexus https教程)

    终于经过一下午的折腾,https可以正常访问: 效果如下: 怎么在jexus上配置https.png 我的环境为: 购买的阿里云centos 7.0 服务器,后台采用的是c#开发,因此部署的是mono ...

  3. 5年前, 以太坊大脑送给V神一份神秘大礼; 今天, V神将它给了你...

    来源 | <Solidity编程> 作者 | Ritesh Modi 责编 | 乔治 出品 | 区块链大本营(blockchain_camp) ##敲重点,文末送书哟 Solidity 的 ...

  4. WeIdentity智能合约源码分析

    WeIdentity智能合约 介绍 本文结合WeIdentity智能合约文档对其源码进行阅读分析.当前,WeIdentity合约层面的工作目标主要包括两部分: WeIdentity DID智能合约,负 ...

  5. JavaScrpit 犀牛书第七版笔记

    JavaScrpit 犀牛书第七版笔记 挖个坑吧,JavaScript 犀牛书英文的第七版(JavaScript: The Definitive Guide, 7th Edition)其实在去年(20 ...

  6. solidity事件详解

    很多同学对Solidity 中的Event有疑问,这篇文章就来详细的看看Solidity 中Event到底有什么用? 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊. ...

  7. 详解 Solidity 事件Event

    很多同学对Solidity 中的Event有疑问,这篇文章就来详细的看看Solidity 中Event到底有什么用? 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊. ...

  8. 基于truffle-contract库之solidity事件与合约调用完整案例!

    /*** 一个基于truffle-contract库实现的以太坊solidity智能合约调用案例!* 注意:truffle-contract库和web3.js使用nodej或import同时导入转码的 ...

  9. solidity采坑日记之智能合约返回事件内容解析

    最近在用java调用solidity智能合约方法的时候,遇到了方法Log解析的问题. 正常在调用合约后,如果该合约有event时间,那么执行结果会返回对应的log日志,但是返回的log日志是0x开头的 ...

最新文章

  1. html标签的赋值与取值
  2. ubuntu下使用SVN
  3. mySQL:两表更新(用一个表更新另一个表)的SQL语句
  4. hadoop入门-在windows上安装,测试hadoop
  5. SAP更新数据表的程序执行需要SE38后执行
  6. java函数求方程,Commons Math学习笔记——函数方程求解
  7. 从XaaS到Java EE – 2012年哪一种该死的云最适合我?
  8. C++一天一个程序(一)
  9. js 触发LinkButton点击事件,执行后台方法
  10. find_element 和find_elements 的区别
  11. redis Background saving terminated by signal 9
  12. LINQ to SQL 用O/R设计器手工建表对象
  13. cpu频率_CPU频率被锁定到800mhz怎么办?
  14. Linux多线程服务端编程:使用muduo C++网络库
  15. python模块:array数组模块
  16. word中插入或更新自动目录后,正文内容也变成了目录的问题
  17. 英读廊——如果运动引起摩擦,摩擦生热,为什么风吹得越快却越冷
  18. Python使用OCR识别中英文
  19. 31 个惊艳的数据可视化作品,让你感受 数据之美!
  20. Hulu:视频广告系统中的算法实践

热门文章

  1. 前后端交互ajax和axios入门讲解,以及http与服务器基础
  2. SQL Server如何设置账号密码
  3. 考研资料 | 西安电子科技大学考研专业课资料(绝密)
  4. react生命周期_React生命周期事件
  5. OpenCV 绘制正多边形
  6. 正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|::|:443... 失败:拒绝连接。
  7. 能量原理和变分法笔记1:变分法简介
  8. python建站部署_记录一下自己的建站过程(四)MongoDB与Pymongo
  9. 在英特尔硬件上部署深度学习模型的无代码方法 OpenVINO 深度学习工作台的三部分系列文章 - CPU AI 第一部
  10. Process finished with exit code -1073741571 (0xC00000FD)的解决方案