从0开始学区块链第12天—如何使用可见性标识符

如何使用可见性标识符(visibility specifier)

"可见性"这个词的使用有点令人困惑,因为在公共区块链上,几乎所有东西都是"可见的",因为透明度是一个关键特征。这里的可见性意味着一段代码可以被另一段代码看到和访问的能力。

可见性指定变量、函数或智能合约可以从定义它的代码所在的区域之外访问的程度。可以根据整个系统中的哪些部分需要访问它来调整其可见范围。

如果你是 JavaScript 或 NodeJS 开发人员,那么你已经熟悉可见性------你导出一个对象的时,就是为了使它在声明它的文件之外可见。

可见度类型

在 Solidity 中有 4 种不同类型的可见性:public、external、internal 和 private。

Public 函数和变量可以在合约内部、外部、其他智能合约和外部账户(你 Metamask 钱包中的那种)访问------几乎可以从任何地方访问。这是最广泛、最宽松的可见性级别。

当一个存储变量被赋予 public 可见度时,Solidity 会自动为该变量的值创建一个隐性的 getter 函数。

所以在我们的 HotFudgeSauce 智能合约中,我们不需要 get() 方法,因为 Solidity 会隐式地为我们提供完全一样的功能,只需给 qtyCups 一个 public 可见度修饰符。

Private 函数和变量只能在声明它们的智能合约中访问。但是它们不能在包含它们的智能合约之外访问。 private 是四个可见性说明符中限制性最强的。

Internal 可见性类似于 private 可见性,因为内部函数和变量只能从声明它们的合约中访问。但是标记为 internal 的函数和变量也可以从派生合约(即从声明合约继承的子合约)访问,但不能从合约外部访问。稍后我们将讨论继承(和派生/子合约)。

状态变量的默认可见度就是 internal。

4 种可见度标识符的表格

external 可见性说明符不适用于变量 - 只有函数可以指定为 external。

external 函数不能从声明合约或继承自声明合约的合约的内部调用。因此,它们只能从该合约之外调用。

这就是它们与公共函数的不同之处------公共函数也可以从声明它们的合约内部调用,而外部函数则不能。

相关推荐
硅基流动1 天前
硅基流动 × ValueCell:8K+Star,去中心化金融智能体加速投资决策
金融·去中心化·区块链
devmoon1 天前
使用 Hardhat 在 Polkadot Hub 测试网部署基础 Solidity 合约(完整实战指南)
web3·区块链·智能合约·波卡·hardhat
威胁猎人1 天前
【黑产大数据】2025年全球KYC攻击风险研究报告
大数据·区块链
焦点链创研究所1 天前
去中心化实体基础设施网络的崛起:比较分析
网络·去中心化·区块链
MicroTech20251 天前
微算法科技(NASDAQ :MLGO)量子测量区块链共识机制:保障数字资产安全高效存储与交易
科技·安全·区块链
区块链蓝海1 天前
Ardor v2.6.0 正式发布:Nxt迁移完成,Ardor迈入多链协同新阶段
人工智能·区块链
MQLYES1 天前
02-UniswapV1-源码篇
去中心化·区块链
devmoon1 天前
快速了解兼容 Ethereum 的 JSON-RPC 接口
开发语言·网络·rpc·json·区块链·智能合约·polkadot
devmoon1 天前
用Remix IDE在Polkadot Hub部署一个最基础的Solidity 合约(新手友好)
web3·区块链·智能合约·编译·remix·polkadot
暴躁小师兄数据学院1 天前
【WEB3.0零基础转行笔记】Golang编程篇-第4讲:Go语言中的流程控制
开发语言·后端·golang·web3·区块链