宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > Gateio > 正文

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

作者:

时间:1900/1/1 0:00:00

什么是事件Evnet?

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

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

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

eventEventName(addressbidder,uintamount);

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

知情人士:ChatGPT开发公司OpenAI去年亏损5.4亿美元:金色财经报道,三位了解OpenAI财务状况的人士透露,该公司去年开发了ChatGPT,并从谷歌招聘了关键员工,致使亏损大约翻了一番,达到5.4亿美元左右。这一此前未公布的数字反映出,在该公司开始出售聊天机器人的使用权限之前,其机器学习模型的训练成本高昂。

尽管在OpenAI于2月推出付费版聊天机器人后,公司收入有所增长,但随着越来越多的客户使用其人工智能技术,以及该公司对该软件未来版本进行培训,这些成本可能会继续上升。

OpenAI首席执行官Sam Altman私下暗示,公司可能会在未来几年筹集至多1000亿美元资金,以进一步开发人工智能的能力。[2023/5/5 14:44:17]

emitEventName(msg.sender,msg.value);

去中心化社交项目Bluesky发布安卓版APP 2023:4月20日消息,由Twitter创始人Jack Dorsey资助的去中心化社交项目Bluesky(AT协议)发布Android版应用程序,目前需要加入等候名单或从朋友那里获取邀请码才能使用该APP。(The Verge)[2023/4/20 14:15:26]

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

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

监听事件

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

百度区块链版权保护专利获授权:10月15日消息,据天眼查信息,百度在线网络技术(北京)有限公司“基于区块链的版权保护方法、装置、设备和介质”专利获授权。摘要显示,本申请具体实现方案为:检测到存在新生成的待保护数字作品,采用用户的区块链账户私钥进行签名,得到作品信息的私钥签名;其中,作品信息包括作品内容信息和创作时间;根据作品信息和私钥签名,生成版权保护事务请求,并发送至区块链网络以进行上链存储。本申请实施例能够实现无需用户操作,即可对新生成的数字作品立即进行版权保护,提高数字作品版权保护的便利性,降低版权保护的推广难度。[2022/10/15 14:29:00]

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

疑似Celsius地址已撤出其Bancor上12,880ETH流动性,仅取回7183ETH:6月28日消息,据派盾PeckShieldAlert数据显示,疑似Celsius相关地址(0x3b6543ebe26824bd8156a103063f56ce50f88080)已撤出其Bancor平台上约12,880ETH流动性,仅取回约7183ETH。[2022/6/28 1:35:27]

先回顾一下合约代码:

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);}});

标签:atc区块链ONTatc币是什么币区块链工程专业学什么区块链存证怎么弄区块链技术发展现状和趋势ONT币是什么币

Gateio热门资讯
比特币中的区块、账户验证以及记账

账本存储在每个节点中,怎么保证每个节点中的数据共同,或者说怎么避免某些节点的账本被歹意篡改而影响到整个网络的买卖?如果说买卖的验证由各个节点完结,那么怎么在不把暗码走漏给其他节点的前提下.

1900/1/1 0:00:00
由于BitPay和Ramp Network的新合作伙伴关系,SHIB变得更容易获得

领先的加密货币支付网关BitPay最近宣布与总部位于伦敦的金融科技公司RampNetwork建立合作伙伴关系,为其用户提供购买20多种受支持的加密货币的选择.

1900/1/1 0:00:00
EOS到底是什么详细解析?

大家好,这里是链客区块链技术问答社区。链客,转为开发者而生,有问必答! EOS有点类似于微软的windows渠道,经过创立一个对开发者友好的区块链底层渠道,支持多个应用一起运转,为开发dAPP供.

1900/1/1 0:00:00
「崛起社区」分析师强调四项进展将使 XRP 价格上涨至 10 美元

尽管XRP价格继续远低于历史高点,但一位广受关注的加密货币分析师预计该资产的美元价值可能会飙升,并根据未来的某些情况提出了不同的目标.

1900/1/1 0:00:00
区块链PoS共识带来的商业价值

BTC带来了PoW共识,PoW共识带来了挖矿,挖矿产业的流行带动了电子制造业,显卡和芯片领域,挖矿的矿工也成为了一群虚拟世界的“价值发现者”,多种基于PoW共识的代币,BTC,LTC.

1900/1/1 0:00:00
详细解析如何才算精通的C++这门语言!

大家好,这里是链客区块链技术问答社区,链客,有问必答!今天讲一讲C++这项技术,看看如何精通它!精通C++是一个艰巨的任务.

1900/1/1 0:00:00