Solidity 课程 8: 修饰器
May 21st, 2022

修饰器(modifier)是solidity特有的语法,类似于面向对象编程中的decorator,声明函数拥有的特性,并减少代码冗余。modifier的主要使用场景是运行函数前的检查,例如地址,变量,余额等。

  • 限制访问
  • 验证输入
  • 防止可重入入侵

1、构建:

   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不允许重载。

2、使用:

如果不是自己的地址在修饰器检测就先报错,不会执行函数内代码:

function changeOwner(address _newOwner) external onlyOwner{
      owner = _newOwner; // 只有owner地址运行这个函数,并改变owner
}

一个函数支持支持设置多个修饰器:

   function changeOwner(address _newOwner) external onlyOwner validAddress(_newOwner){
      owner = _newOwner; // 只有owner地址运行这个函数,并改变owner
   }

3、OppenZepplin 的Ownable标准实现:

总结

这节学习了函数修饰器,包括修饰器的构建和使用。


全部代码:

Reference:

Subscribe to Novar
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from Novar

Skeleton

Skeleton

Skeleton