修饰语在Solidity中做了什么?

时间:2017-07-08 04:18:29

标签: ethereum solidity

阅读它所说的文档“以声明的方式向函数添加语义”

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

3 个答案:

答案 0 :(得分:13)

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

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

例如,spring.jpa.hibernate.naming.implicit-strategy= org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy= org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 通常用于确保方法的调用者是合同的所有者:

isOwner

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

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

    _; // continue executing rest of method body
}

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

  // code
}

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

答案 1 :(得分:1)

这只是确保有人调用特定函数时满足特定属性的标准。​​

您可以创建自己的修饰符:)

示例1:

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

       _; // continue executing rest of method body

   }

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

     // code

   }

示例2:

    uint256 thisNumber = 4;

    modifier HigherThan2(uint256 _x) {

      if (_x < 2) {
           throw;
       }

       _; // continue executing rest of method body
    }

    doMathStuff() HigherThan2(thisNumber) {

     // will check if thisNumber is higher than 2

     // then, more code

    }

另一方面,您可以使用预定义的修饰符,例如payable

function ThisSuperICO() payable {
  require (msg.value > 0);

  // more code

}

基本上是处理条件的标准,当不满足这些条件时抛出呼叫。

希望这会有所帮助!

干杯。

答案 2 :(得分:0)

修饰符是一段代码,由开发人员定义的某种验证类型的规则或逻辑组成。这段代码用于可重用性。 它是在牢固定义函数时传入的,其目的是在运行相应功能之前进行一些验证,现在,如果验证失败,则相应功能将不会执行。

与node.js / express-framework相似:-可以将其视为中间件功能。

具有html表单验证功能的类比:-通过验证函数调用触发提交时,如果验证失败,则提交被中止。