前言
函数、函数修改器、事件。
一、函数修改器
函数修改器类似于装饰器,目的是在在不改动原函数的情况下修改函数的行为,减少代码量。
函数修改器(modifier)是不可以重载的。修改器的定义使用modifier,而不是Function的。
modifier onlyowner() {
require(
msg.sender == owner,
"Only owner."
);
_;
}
onlyowner修改器,被修饰的函数会在“_”处执行。
函数修改器可以带参数。
二、事件 Event
事件是能方便地调用以太坊虚拟机日志功能的接口。
事件的定义:event Transfer(address indexed from,address indexed to,uint amount);
事件的触发:emit Transfer(from,to,amount);
indexed是让evm将数据放入topic,不加则放入data,放入topic基础费用375,data每字节8.
事件是调用evm日志功能的接口,所以对应着evm字节码log0,log1...log4.其中log0不存topic(32字节),仅存数据。其中topic[0]是事件的摘要即keccak256() hash,这样就决定了最多可以有3个indexed(在使用log4的情况下)。
事件在合约中可被继承。当他们被调用时,会使参数被存储到交易的日志中 —— 一种区块链中的特殊数据结构。 这些日志与地址相关联,被并入区块链中,只要区块可以访问就一直存在