主页 > imtoken官方版 > Solidity 智能合约:onlyOwner 函数修饰符

Solidity 智能合约:onlyOwner 函数修饰符

imtoken官方版 2023-01-31 05:05:23

内容来自:

函数修饰符

函数修饰符看起来和函数没什么区别,但是关键字修饰符告诉编译器这是修饰符(modifier),而不是函数(function)。 它不能像函数一样被直接调用,只能添加到函数定义的末尾来改变函数的行为。

我们仔细阅读onlyOwner:

/**

以太坊股票代码是什么_精通以太坊代码_以太坊go代码

* @dev 调用者不是‘主人’,就会抛出异常 */ modifier onlyOwner() { require(msg.sender == owner);

以太坊go代码_精通以太坊代码_以太坊股票代码是什么

_; } onlyOwner 函数修饰符是这么用的:

精通以太坊代码_以太坊go代码_以太坊股票代码是什么

contract MyContract is Ownable { event LaughManiacally(string laughter); //注意! `onlyOwner`上场 :

精通以太坊代码_以太坊股票代码是什么_以太坊go代码

function likeABoss() external onlyOwner { LaughManiacally("Muahahahaha"); } }

以太坊go代码_精通以太坊代码_以太坊股票代码是什么

注意 likeABoss 函数上的 onlyOwner 修饰符。 当你调用likeABoss时精通以太坊代码,onlyOwner中的代码首先被执行,当_; onlyOwner中的语句执行完精通以太坊代码,程序返回并执行likeABoss中的代码。

可以看出,虽然函数修饰符也可以应用于各种场合,但最常见的是在函数执行前添加一个快速的require检查。

因为在函数中添加了修饰符onlyOwner,所以只有合约的所有者(即部署者)可以调用它。

注意:主人对合约的特权当然是合法的,但也可以被恶意利用。 例如,如果所有者添加了一个后门,可以让他偷走别人的僵尸呢?

所以非常重要的是部署在以太坊上的DApp并不能保证它是真正去中心化的。 您需要阅读并理解其源代码,以防止未部署者恶意植入后门; 作为开发者,如何给自己留出修复bug的空间,同时也尽可能把权力放给用户,让他们放心你愿意把数据放在你的DApp里,这确实需要一个微妙的平衡。