基于以太坊的智能合约开发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"。

相关推荐
人类群星闪耀时2 小时前
区块链技术如何重塑金融衍生品市场?
金融·区块链
渗透测试老鸟-九青6 小时前
面试经验分享 | 成都渗透测试工程师二面面经分享
服务器·经验分享·安全·web安全·面试·职场和发展·区块链
程序猿chen6 小时前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算
碧海饮冰1 天前
Crypto加密货币生态构成及较有前景的几个crypto项目
区块链
秋说2 天前
【区块链安全 | 第八篇】多签机制及恶意多签
安全·区块链
我是前端小学生2 天前
一文详细梳理Bank合约业务逻辑
智能合约
CryptoPP2 天前
基于WebSocket的金融数据实时推送系统架构设计对接多国金融数据API
websocket·网络协议·金融·系统架构·区块链
浪子小院2 天前
区块链技术之分布式数字身份:构建数字世界的信任基石
区块链
秋说2 天前
【区块链安全 | 第十七篇】类型之引用类型(一)
安全·区块链
网络研究院2 天前
身份验证:区块链如何让用户掌控一切
去中心化·区块链·身份·隐私·技术·验证·数字