【问题标题】:What is the difference between an internal/external and public/private function in solidity?Solidity 中的内部/外部和公共/私人功能有什么区别?
【发布时间】:2018-05-17 06:19:19
【问题描述】:

目前正在阅读 Solidity 文档: https://solidity.readthedocs.io/en/develop/types.html#function-types

默认情况下,函数类型是内部的,所以 internal 关键字可以 被省略。相反,合约函数本身是公开的 默认,仅当用作类型的名称时,默认为 内部。

这对我来说没有意义。一个函数如何同时是内部的和公共的?

我知道internal 表示函数只能在合约内调用,external 可以在合约外调用。所以对我来说,内部是私有的,外部是公开的,但文档听起来像是它可以同时是公开的和内部的?

那么internal/externalpublic/private 在功能方面有什么区别(如果有的话)?

【问题讨论】:

  • 您的问题可能更适合另一个 StackExchange 站点。有关区块链、比特币和其他加密货币的问题,请转至Bitcoin StackExchange。对于以太坊特定的问题,请转至Ethereum StackExchange。 :)

标签: blockchain ethereum solidity smartcontracts


【解决方案1】:

• 外部:这些功能可从其他合约和交易中访问。除非使用 this 关键字,否则它们不能在内部调用。在外部呼叫期间您需要小心,因为它们可以 涉及遇到安全风险、损失gas和抛出错误。

• 公共:默认情况下,函数是公共的。它们可以在内部调用,也可以通过消息调用。

• 内部:可以在智能合约和派生的智能合约中访问。对于状态变量,只有两种可见性类型:publicinternal。默认为internal

• 私有:私有函数仅对声明它们的同一合约可见。它更严格。除非需要,否则请使用最低限度的可见性来保护您的代码免受外部攻击。私有可见性只会阻止其他 从访问或修改驻留在驻留在信息的合同 合同,但它仍然在现场公众中为全世界可见 区块链。

【讨论】:

    【解决方案2】:

    以下是四个关键字的区别:

    private 表示只能从合约内的其他函数调用

    internal 类似于私有,但也可以被从当前继承的合约调用

    external只能在合约外调用

    public 可以在任何地方调用,无论是内部还是外部。

    【讨论】:

      【解决方案3】:

      在 Solidity 的术语中,internal/external 也用作描述“两种函数调用”,而不仅仅是作为访问修饰符。

      Take a look at the documentation section about 'Visibility and Getters' inside the contracts.

      由于 Solidity 知道两种函数调用(不创建实际 EVM 调用(也称为“消息调用”)的内部函数调用和创建实际 EVM 调用的外部函数调用),因此函数和状态变量有四种类型的可见性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-27
        • 2018-08-19
        • 2016-09-20
        • 2017-02-10
        • 2020-06-17
        • 2012-06-13
        • 2011-04-16
        • 1970-01-01
        相关资源
        最近更新 更多