我正在学习稳固。我偶然发现了这段代码,并发现它令人困惑。我理解onlyOwner修饰符的用法,它只限制所有者和公共修饰符的访问,以允许函数在内部或外部调用。但是,将"public“和"onlyOwner”放在一起意味着什么,因为只有所有者才能调用函数?换句话说,在这个功能中,公共的用途是什么?
// contracts/MyContract.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyContract is Ownable {
function normalThing() public {
// anyone can call this normalThing()
}
function specialThing() public onlyOwner {
// only the owner can call specialThing()!
}
}发布于 2022-01-31 16:54:52
public是功能可视性说明符,和external、internal和private一样。它规定了一个函数是可以公开调用(即由每个人调用),还是可以私下调用(即仅由合同本身调用)。
当一个函数是public (或external)时,这意味着在该契约之外调用该函数是可能的,因此人们可以发送事务来调用它,其他契约也可以调用该函数。
可见性说明符与修饰符(如onlyOwner)是分开的。它只会改变谁可以调用函数。当函数被调用时,无论可见性如何,修饰符仍然被正常执行,因此在您的示例中,如果某个不是所有者的人调用specialThing,则该调用仍将被恢复,因为onlyOwner被调用。
https://ethereum.stackexchange.com/questions/120388
复制相似问题