modifier即函数的修改器,可以用来改变一个函数的行为,控制函数的逻辑。修改器是一种合约属性,可以被继承和重写。
下面以代码为例进行介绍(代码来源于CryptoKitties项目KittyAccessControl.sol合约,详细代码可以查看https://github.com/dapperlabs/cryptokitties-bounty)
modifier onlyCLevel() {
require(
msg.sender == cooAddress ||
msg.sender == ceoAddress ||
msg.sender == cfoAddress
);
_;
}
前面一段代码是一个修改器,声明了一个约束onlyClevel:仅当当前的地址为ceoAddress或者cfoAddress或者cooAddress时,可以执行后续代码。下划线_是一个占位符,代表了执行函数接下来的代码。
有时你还会看到上面那段代码写成如下形式:
modifier onlyCLevel() {
if(
msg.sender != cooAddress &&
msg.sender != ceoAddress &&
msg.sender != cfoAddress
) throw;
_;
}
其实两段代码是等价的,if()throw的写法是较为老式的写法,现在使用require()的写法较多。
function pause() external onlyCLevel whenNotPaused {
paused = true;
}
接下来一段代码声明了一个函数pause(),用于暂停合约,这里使用了onlyClevel约束,表明该函数的