【开发智能合约—Solidity系列】关于可视范围(Visibility)
为什么要特别介绍可视范围呢试想,假如我们的合约里有些非常重要的内容只能局限于合约内使用,此时就可以运用可视范围的技巧,将某些重要的功能、状态锁定在合约内使用,不随意开放给外部调用,避免污染内部,但有些又是共用的内容及功能时,我们就可以利用公开的可视范围让相同的功能能够重复使用。
合约中又可以依照不同的分责区分可视范围,在Solidity的世界中主要会分为两大类型的可视范围,分别是状态变数(State Variable)跟功能(Function)。
状态变数(State Variable)的可视范围
public
这种可视范围最为宽松,除了内部合约以外,继承与外部合约也都能够进行调用。
internal
除了自身的合约以外,继承的合约也能够调用,但外部合约是不可视的。
private
这种可视范围仅局限于自身的合约之中,不可被外部合约调用,包括继承的合约也是不可视的。
功能(Function)的可视范围
Function的部分比较特殊,扩增了external,这也是我们在传统的程式语言中比较少见的一种应用,以下就让我们来好好介绍这个部分。
external
仅外部的合约可以进行调用,内部以及继承的合约皆不可视,主要用意是当我们不确定这个功能是否内部也会调用时,可以宣告为external,一旦宣告为external之后,内部要调用就得使用this.xxx()才能调用,另外参数的部分是使用Calldata作为来源,会减少许多不必要的Copy。
public
可视范围就如同状态变数的public一样,除了内部合约以外,继承与外部合约也都能够进行调用。
internal
可视范围一样同状态变数的internal,除了自身的合约以外,继承的合约也能够调用,但外部合约是不可视的。
private
这种可视范围仅局限于自身的合约之中,不可被外部合约调用,包括继承的合约也是不可视的。
结语
以上是这次篇章介绍的可视范围用法,撰写一份安全的合约时,我们务必注意什么能开放,开放到什么程度,这些都与可视范围息息相关,后续维护时也较能明确的界定范围,不至于全部开放导致混乱,或者全部封闭导致一堆重复的内容。
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。