修饰符在固体中有什么作用?

  • 本文关键字:作用 ethereum solidity
  • 更新时间 :
  • 英文 :


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

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

修饰符允许您将其他功能包装到方法中,因此它们有点像 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
}

您还可以堆叠多个修饰符以简化您的过程:

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
}

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

它只是一个标准,用于确保在有人调用特定函数时满足某个属性。

您可以制作自己的修改器:)

示例 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
}

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

希望这有帮助!

干杯。

修饰符是一段代码,它包含开发人员定义的某种验证类型的规则或逻辑。这段代码用于可重用性目的。 它是在 solidity 中定义函数时传入的,其目的是在运行相应的函数之前进行一些验证,现在如果验证失败,那么相应的函数就不会执行。

与node.js/express-framework类比:- 将其视为中间件函数。

与html表单验证函数类比:- 当使用验证函数调用触发提交时,如果验证失败,则提交将中止。

类似于我们实现基于角色的路由的方式,修饰符用于保护函数。如果函数传递某些条件,调用方可以调用该函数。

智能合约有24kb的大小限制。 如果其大小较大,则无法编译合约。modifiers允许我们减少合约规模。假设你有一个大合约,你有 10 个受保护的功能。在每个函数中实现 if 条件会占用太多空间。

最新更新