Solidity 修改器

文章介绍了Solidity中的onlyOwner修饰符及其使用方法,展示了如何在智能合约中通过继承和修饰符来管理所有权,并提供了代码示例。

onlyOwner 构造如此常见,以至于我们将专门为其开辟一个章节。

考虑以下代码


contract Ownable {

    address public owner;

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "onlyOwner");
        _;
    }

    function changeOwner(
        address newOwner
    )
        public
        onlyOwner {
            owner = newOwner;
    }

}

contract HoldFunds is Ownable {

    function withdrawFunds()
        public
        onlyOwner {
            (bool ok, ) = owner.call{
                value: address(this).balance
            }("");
            require(ok, "transfer failed");
    }

    receive()
        external
        payable {

    }
}

让我们看看这里的明星:


modifier onlyOwner() {
    require(msg.sender == owner, "onlyOwner");
    _;
}

它简单地意味着“执行下划线之前的代码,然后再执行函数。”

这是一种方便的方式来“修改”函数的行为,因此称之为“修改器”。

请注意,即使 HoldFunds 继承了 Ownable,它也没有覆盖任何函数。Solidity 中的继承更多是一种包含行为的机制,而不是定义某种多态性(如果你不知道这是什么,不用担心)。

所以在这种情况下,如果你希望你的智能合约中包含一些方便的函数,你可以导入另一个提供所需功能的合约。

这并不是严格必要的。你可以将所有代码放入一个大合约中。但那样的代码可读性会更差。

修改器不仅可用于检查所有权,但所有权检查是最常见的用例。

不要在修改器内部修改状态。 尽管 Solidity 允许你这样做,但这会使代码更难理解。这被认为是不良实践。

了解更多

查看 区块链训练营 ,以了解更多关于智能合约开发和代币标准的知识。

  • 原文链接: rareskills.io/learn-soli...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/