Solidity中的修饰符:公开、私有、内部和外部

本文介绍了 Solidity 中的访问修饰符,包括 public、private、internal 和 external。通过简单的示例,深入分析了每种修饰符如何控制对合约函数和状态变量的访问,从而确保去中心化应用(DApps)的安全性与完整性。

Solidity 是一种强大的编程语言,专门用于在以太坊区块链上开发智能合约。在编写智能合约时,控制对某些函数和变量的访问是确保去中心化应用程序(DApps)安全性和完整性的关键。Solidity 提供了一组访问修饰符,让你可以指定谁可以与合约代码的各个部分进行交互。

在这篇博客文章中,我们将探索四个重要的修饰符:publicprivateinternalexternal,并给出易于理解的示例。

图片由 Pete Linforth 提供,来自 Pixabay

什么是修饰符?

修饰符是 Solidity 中的特殊关键词,用于控制智能合约中函数和状态变量的访问。它们充当了守门员,决定谁可以调用特定的函数或访问变量。

01. public 修饰符

public 修饰符就像开放的门政策,允许从任何地方访问函数和状态变量,包括外部合约。它是最宽松的修饰符,确保每个人都可以不受限制地与指定的函数和变量进行交互和使用。就像一个欢迎所有人的公共公园,人人都可以享受和利用可用的设施。以下是一个简单的示例:

pragma solidity ^0.8.0;

contract ExampleContract {
    uint256 public myNumber = 42;

    function getMyNumber() public view returns (uint256) {
        return myNumber;
    }
}

myNumber 变量被声明为 public,使其可从任何地方访问,甚至外部合约。getMyNumber 函数也是 public

2. private 修饰符

private 修饰符就像一个锁着的门,严格控制当前合约内函数和状态变量的访问。它确保这些元素只能由合约本身访问和操作,对任何外部实体不可见且不可用。它就像一间家庭中的私人房间,仅限于居民使用,外界无法访问。以下是一个例子:

pragma solidity ^0.8.0;

contract ExampleContract {
    uint256 private secretNumber = 12345;

    function revealSecret() public view returns (uint256) {
        return secretNumber;
    }
}

使用 private 修饰符,secretNumber 变量只能在此合约内访问。没有外部或派生合约可以直接访问它。

*只能在声明它的合约内访问。

3. internal 修饰符

internal 修饰符就像一扇半开的门,不仅允许在当前合约中访问函数和状态变量,还允许派生合约访问。它确保这些元素无法从外部来源访问,例如外部合约或用户。它就像一次家庭聚会,某些信息和资源在家庭成员之间共享,但对外部人士不可用。这个修饰符在 Solidity 中实现继承时特别有用,因为它允许派生合约访问和利用父合约的内部元素。以下是一个示例:

pragma solidity ^0.8.0;

contract BaseContract {
    uint256 internal internalNumber = 99;
}

contract DerivedContract is BaseContract {
    function getInternalNumber() public view returns (uint256) {
        return internalNumber;
    }
}

internalNumber 变量在基合约中标记为 internal,这允许它被派生合约中的函数访问,比如 DerivedContract 中的 getInternalNumber,但不能从外部合约访问。

*只能在相同合约(文件)内访问。

4. external 修饰符

external 修饰符就像一条单行道,允许函数仅通过外部合约或事务访问。标记为 external 的函数不能在合约内部被调用。这是一种确保这些函数仅能被外部调用的方式,禁止任何内部调用。它就像一个只能由外部客户访问的客服台,员工无法内部使用这些服务。external 修饰符主要用于定义专门为外部合约交互而设计的函数。以下是一个示例:

pragma solidity ^0.8.0;

contract ExampleContract {
    function greet() external pure returns (string memory) {
        return "Hello, World!";
    }
}

greet 函数被标记为 external。它只能从外部合约调用,无法在合约内部访问。

结论

这些修饰符帮助你控制谁可以访问合约的函数和状态变量,确保你的 DApps 按预期运行,同时维护以太坊区块链的安全性。

注意事项:

👋 嗨!如果你有任何迫切的问题或只是想打个招呼,别害羞 - 我离你只有一条消息的距离。💬 你可以通过 jamilkashem@zoho.com 联系我。

🤝 顺便说一下,我觉得我们有着同样的软件工程兴趣 - 让我们在 LinkedIn 上连接! 💻

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

0 条评论

请先 登录 后评论