修饰器(modifier
)是solidity
特有的语法,类似于面向对象编程中的decorator
,声明函数拥有的特性,并减少代码冗余。modifier
的主要使用场景是运行函数前的检查,例如地址,变量,余额等。
modifier onlyOwner {
require(msg.sender == owner); // 检查调用者是否为owner地址
//require(msg.sender == owner, "Not owner");//可以定义报错内容
_; //如果是的话,继续运行函数主体;否则报错并revert交易
}
_;
: 下划线是特殊符号,仅用在修饰器中,告诉solidity继续执行剩下的代码:
modifier noReentrancy() {
require(!locked, "No reentrancy");
locked = true;//无论如何都执行
_;
locked = false;//报错则不执行
}
支持传递参数:
modifier validAddress(address _addr) {//可传参数
require(_addr != address(0), "Not valid address");
_;
}
**
注意:**modifier
不允许重载。
如果不是自己的地址在修饰器检测就先报错,不会执行函数内代码:
function changeOwner(address _newOwner) external onlyOwner{
owner = _newOwner; // 只有owner地址运行这个函数,并改变owner
}
一个函数支持支持设置多个修饰器:
function changeOwner(address _newOwner) external onlyOwner validAddress(_newOwner){
owner = _newOwner; // 只有owner地址运行这个函数,并改变owner
}
这节学习了函数修饰器,包括修饰器的构建和使用。
全部代码:
Reference: