基于以太坊的智能合约开发Solidity(事件&日志篇)

javascript 复制代码
//声明版本号(程序中的版本号要和编译器版本号一致)
pragma solidity ^0.5.17;
//合约
contract EventTest
{

    //状态变量
    uint public Variable;

    //构造函数
    constructor() public
    {
        Variable = 100;
    }

    event ValueChanged(uint newValue);  //事件声明
    event Log(string, uint);

    //调用该函数,修改状态变量的值并触发事件
    function setValue(uint newValue) public 
    {
        Variable = newValue;
        emit ValueChanged(newValue);  //触发事件
        emit Log("New_Variable = ", newValue);  //记录日志
    }
    
}

(1)事件用于记录在区块链上的特定活动,"emit ValueChanged(newValue);"语句的作用是触发ValueChanged事件(首先需要声明事件)。

①触发事件后会生成相应日志,上图黄框就是"emit ValueChanged(newValue);"语句产生的日志,其中"form"指的是触发事件的合约账户。

②事件主要是供外部应用程序监听,外部应用程序可以监听事件以获取合约中特定活动的通知

(2)日志的作用是在智能合约中记录重要信息,"emit Log("New_Variable = ", newValue);"语句的作用就是生成一个日志(同样需要先声明,日志可以由字符串、整型等数据类型组成),通过以太坊区块链浏览器或特定工具可以查看记录的日志信息。

(3)触发事件和记录日志实际上是同一件事,声明时使用关键字event,触发时使用关键字emit,只是二者的目的不同,事件名一般按照实际行为命名,而日志常声明为"Log"或"log"。

相关推荐
数据与人工智能律师7 小时前
正确应对监管部门的数据安全审查
大数据·网络·数据库·人工智能·区块链
软件工程小施同学9 小时前
计算机学报 2024年 区块链论文 录用汇总 附pdf下载
pdf·区块链
cainiao0806051 天前
Web4.0身份革命:去中心化身份系统的全栈实现路径
去中心化·区块链
帅云毅1 天前
Web3.0的认知补充(去中心化)
笔记·学习·web3·去中心化·区块链
拾忆-eleven1 天前
区块链如何达成共识:PoW/PoS/DPoS的原理、争议与适用场景全解
区块链·智能合约
ProgramHan2 天前
Web3革命——区块链技术重构数字世界的技术逻辑与产业未来
重构·web3·区块链
电报号dapp1192 天前
Web3实战:从零开发你的ERC20代币合约
web3·去中心化·区块链·智能合约
咨询187150651272 天前
高企复审奖补!2025年合肥市高新技术企业重新认定奖励补贴政策及申报条件
大数据·人工智能·区块链
电报号dapp1192 天前
Web3钱包开发功能部署设计
web3·去中心化·区块链·智能合约
云边有个稻草人2 天前
【金仓数据库征文】从云计算到区块链:金仓数据库的颠覆性创新之路
数据库·云计算·区块链·金仓数据库 2025 征文·数据库平替用金仓·金仓数据库概述·金仓数据库的产品优化提案