主页 > 安卓版imtoken钱包打 > Solidity 智能合约:onlyOwner 函数修饰符
Solidity 智能合约:onlyOwner 函数修饰符
安卓版imtoken钱包打 2023-07-08 05:24:59
内容来自:
函数修饰符
函数修饰符看起来和函数没什么区别,但是关键字修饰符告诉编译器这是修饰符(modifier),而不是函数(function)。 它不能像函数一样被直接调用,只能添加到函数定义的末尾来改变函数的行为。
我们仔细阅读onlyOwner:
/**
* @dev 调用者不是‘主人’,就会抛出异常
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
onlyOwner 函数修饰符是这么用的:
contract MyContract is Ownable {
event LaughManiacally(string laughter);
//注意! `onlyOwner`上场 :
function likeABoss() external onlyOwner {
LaughManiacally("Muahahahaha");
}
}
注意 likeABoss 函数上的 onlyOwner 修饰符。 当你调用likeABoss时精通以太坊代码,onlyOwner中的代码首先被执行,当_; onlyOwner中的语句执行完精通以太坊代码,程序返回并执行likeABoss中的代码。
可以看出,虽然函数修饰符也可以应用于各种场合,但最常见的是在函数执行前添加一个快速的require检查。
因为在函数中添加了修饰符onlyOwner,所以只有合约的所有者(即部署者)可以调用它。
注意:主人对合约的特权当然是合法的,但也可以被恶意利用。 例如,如果所有者添加了一个后门,可以让他偷走别人的僵尸呢?
所以非常重要的是部署在以太坊上的DApp并不能保证它是真正去中心化的。 您需要阅读并理解其源代码,以防止未部署者恶意植入后门; 作为开发者,如何给自己留出修复bug的空间,同时也尽可能把权力放给用户,让他们放心你愿意把数据放在你的DApp里,这确实需要一个微妙的平衡。