首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坚固的公共功能还是外部功能--哪个更有效?

坚固的公共功能还是外部功能--哪个更有效?
EN

Ethereum用户
提问于 2023-03-15 00:27:44
回答 2查看 76关注 0票数 2

使用公共函数访问修饰符比使用外部函数访问修饰符更有效吗?

我对下面的联系人进行了一些测试,得到了不同的结果。根据我称之为inc函数的顺序,它似乎也有所不同。

下面是我对此进行测试的合同,我一直在使用Remix运行,并得到了不同的结果:

代码语言:javascript
复制
contract Storage {
    uint256 number;

    function incP(uint256 i) public {
        number = number + i;
    }

    function incE(uint256 i) external {
        number = number + i;
    }
}

编辑:

代码语言:javascript
复制
Using the code below and running it via Remix.
calling the public function costs: execution cost   2415 gas
calling the external function costs: execution cost 2437 gas

更新的代码块:

代码语言:javascript
复制
pragma solidity >=0.8.2 <0.9.0;

contract Storage {
    uint256 number = 5;

    function incP() public view returns(uint256) {
        return number;
    }

    function incE() external view returns(uint256) {
        return number;
    }
}

因此,考虑到这一点,使用公共函数修饰符和外部函数修饰符显然是有区别的。有人知道为什么吗?

EN

回答 2

Ethereum用户

发布于 2023-03-15 06:53:25

让我们看看,您应该创建两个契约StorageP和StorageE。

代码语言:javascript
复制
contract StorageP {
    uint256 public number;

    function inc(uint256 i) public {
      number = number + i;
    }
}

contract StorageE {
    uint256 public number;

    function inc(uint256 i) external {
      number = number + i;
    }
}

请记住:第一个存储时隙呼叫比下一个呼叫更昂贵。

票数 1
EN

Ethereum用户

发布于 2023-03-15 07:29:57

使用外部功能而不是公共功能不会影响煤气。

直到solidity 0.6.9,只有外部函数允许调用数据参数。

公共函数强制使用更昂贵的内存参数。这意味着external函数比public函数更有效。

0.6.9开始,所有函数都可以使用内存和调用数据。这意味着现在没有气体的差别。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/147417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档