修饰语在Solidity中做了什么?

met*_*ean 6 ethereum solidity

阅读文档,它说"以声明的方式向函数添加语义"

我可以将它理解为Java中的"接口"吗?

Mig*_*ota 13

修饰符允许您将其他功能包装到方法中,因此它们有点像OOP中的装饰器模式.

修饰符通常用于智能合约中,以确保在继续执行方法中的其余代码之前满足某些条件.

例如,isOwner通常用于确保方法的调用者是合同的所有者:

modifier isOwner() {
   if (msg.sender != owner) {
        throw;
    }

    _; // continue executing rest of method body
}

doSomething() isOwner {
  // will first check if caller is owner

  // code
}
Run Code Online (Sandbox Code Playgroud)

您还可以堆叠多个修改器以简化您的过程:

enum State { Created, Locked, Inactive }

modifier isState(State _state) {
    require(state == _state);

    _; // run rest of code
}

modifier cleanUp() {
    _; // finish running rest of method body

    // clean up code
}

doSomething() isOwner isState(State.Created) cleanUp {
  // code
}
Run Code Online (Sandbox Code Playgroud)

修饰符以声明和可读的方式表达正在发生的操作.