本文介绍了 Solidity 中的访问修饰符,包括 public、private、internal 和 external。通过简单的示例,深入分析了每种修饰符如何控制对合约函数和状态变量的访问,从而确保去中心化应用(DApps)的安全性与完整性。
Solidity 是一种强大的编程语言,专门用于在以太坊区块链上开发智能合约。在编写智能合约时,控制对某些函数和变量的访问是确保去中心化应用程序(DApps)安全性和完整性的关键。Solidity 提供了一组访问修饰符,让你可以指定谁可以与合约代码的各个部分进行交互。
在这篇博客文章中,我们将探索四个重要的修饰符:public
、private
、internal
和 external
,并给出易于理解的示例。
图片由 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
。
private
修饰符private 修饰符就像一个锁着的门,严格控制当前合约内函数和状态变量的访问。它确保这些元素只能由合约本身访问和操作,对任何外部实体不可见且不可用。它就像一间家庭中的私人房间,仅限于居民使用,外界无法访问。以下是一个例子:

pragma solidity ^0.8.0;
contract ExampleContract {
uint256 private secretNumber = 12345;
function revealSecret() public view returns (uint256) {
return secretNumber;
}
}
使用 private
修饰符,secretNumber
变量只能在此合约内访问。没有外部或派生合约可以直接访问它。
*只能在声明它的合约内访问。
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
,但不能从外部合约访问。
*只能在相同合约(文件)内访问。
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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!