INF:搞懂事件的使用,详细解读Solidity事件Event

什么是事件Evnet?

就是以EVM日志基础设备提供一个接口,当被事件调用时,出发参数存储到日志中,其与合约地址关联,并记录到区块链中。关系就是:区块链是打包交易区块组成的链条,每一个交易会包含0到多个记录,日志代表智能合约所触发事件。

DAPP中,监听了事件,当事件发生时,会回调。当然要注意的就是,日志和事件在合约内是无法被访问,即使是创建日志的合约。

在Solidity代码中,使用event关键字来定义一个事件,如:

eventEventName(addressbidder,uintamount);

这个用法和定义函数式一样的,并且事件在合约中同样可以被继承。触发一个事件使用emit(说明,之前的版本里并不需要使用emit),如:

Axie Infinity联合创始人:Axie Infinity每天有约100万名活跃玩家是加密新手:10月8日消息,Axie Infinity 联合创始人 Aleksander Leonard Larsen在Token2049 上关于元宇宙的小组讨论中表示,Axie Infinity 每天有大约 200 万活跃玩家,其中 50% 以前从未使用过任何加密应用程序。 他表示:“现在开始玩 Axie 真的很难。基本上,他们无法进入游戏本身,因为它太难了。”

为了让新玩家的上手流程顺畅,Axie Infinity 开发商 Sky Mavis 上个月宣布计划为新玩家提供免费的入门 Axies(目前,新玩家首先需要购买三个 Axies,每个可能要花费数百美元)。[2021/10/8 20:12:19]

emitEventName(msg.sender,msg.value);

声音 | 央行上海总部:区块链等新兴技术为解决金融发展不平衡、不充分的问题提供了新手段:人民银行上海总部相关负责人在接受专访时表示,金融科技作为新形势下金融与科技深度融合的产物,为解决金融发展不平衡、不充分的问题提供了新手段。其核心是利用云计算、大数据、人工智能和区块链等新兴技术改造或创新金融产品、经营模式和业务流程。这一创新业务形式的出现, 有效提升了金融服务能力和效率, 降低了金融交易成本, 拓展了金融发展广度与深度,也已成为传统金融业改革转型的重要抓手。金融科技挑战与机遇并存、效率与风险相伴,要坚持正本清源、守正创新,规范引导金融科技健康有序发展。上述负责人表示,“监管沙箱”是一种包容式的监管手段。人民银行上海总部将积极研究探索监管沙箱机制,在人民银行总行的支持下探索有利于推动我国金融科技创新的监管方式。(中国证券报)[2019/12/5]

触发事件可以在任何函数中调用,如:

日本加密货币交易所BITPOINT将于5月举办面向虚拟货币新手的研讨会: 据日本加密货币交易所BITPOINT官网信息,BITPOINT将于日本时间2018年5月26日星期六14:00~16:45在福冈县举办面向虚拟货币新手的研讨会,届时,BITPOINT董事长林千春将会作为讲师出席此研讨会。[2018/4/28]

functiontestEvent()public{emitEventName(msg.sender,msg.value);}

监听事件

通过上面的介绍,可能大家还是不清楚事件有什么作用,点击”UpdataInfo”按钮之后,虽然调用智能合约成功,但是当前的界面并没有得到更新。使用事件监听,就可以很好地解决这个问题,让看看如何实现。

修改合约,定义事件及触发事件

先回顾一下合约代码:

pragmasolidity^0.4.21;contractInfoContract{stringfName;uintage;functionsetInfo(string_fName,uint_age)public{fName=_fName;age=_age;}functiongetInfo()publicconstantreturns(string,uint){return(fName,age);}}

首先,需要定义一个事件:

eventInstructor(stringname,uintage);

这个事件中,会接受两个参数:name和age,也就是需要跟踪的两个信息。

然后,需要在setInfo函数中,触发Instructor事件,如:

functionsetInfo(string_fName,uint_age)public{fName=_fName;age=_age;emitInstructor(_fName,_age);}

在web3与智能合约交互实战时,点UpdataInfo按钮之后,会调用setlnfo函数,触发Instructor事件。

使用Web3监听事件,刷新UI

现在需要使用Web3监听事件,刷新UI。先回顾下之前的使用Web3和智能合约交互的代码:

<script>if(typeofweb3!=='undefined'){web3=newWeb3(web3.currentProvider);}else

{web3=newWeb3(newWeb3.providers.HttpProvider("http://localhost:7545"));}web3.eth.defaultAccount=web3.eth.accounts;varinfoContract=web3.eth.contract(ABIINFO);varinfo=infoContract.at('CONTRACTADDRESS');info.getInfo(function(error,result){if(!error){$("Billions项目组button").click(function(){info.setInfo($("Billions项目组age").val());});</script>

现在可以不需要info.getInfo()来获取信息,而改用监听事件获取信息,先定义一个变量引用事件:

varinstructorEvent=info.Instructor();

然后使用.watch()方法来添加一个回调函数:

instructorEvent.watch(function(error,result){if(!error){$("#info").html(result.args.name+'('+result.args.age+'yearsold)');}else{console.log(error);}});

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

瑞波币比特币:比特币又被死亡了?

每当熊市总会听到一种声音:比特币已死。据不完全统计,比特币诞生至今已被媒体累计致死467次。其中最早的一次死亡出现在2010年,彼时价格0.23刀,有地下经济学家称:唯一让比特币活了这么久的就是.

比特币INF:区块链中的架构框架

架构图 从架构设计上来说,区块链可以简单的分为三个层次,协议层、扩展层和应用层。其中,协议层又可以分为存储层和网络层,它们相互独立但又不可分割。 协议层 所谓的协议层,就是指代最底层的技术.

[0:5ms0-4:556ms