使用公共函数访问修饰符比使用外部函数访问修饰符更有效吗?
我对下面的联系人进行了一些测试,得到了不同的结果。根据我称之为inc函数的顺序,它似乎也有所不同。
下面是我对此进行测试的合同,我一直在使用Remix运行,并得到了不同的结果:
contract Storage {
uint256 number;
function incP(uint256 i) public {
number = number + i;
}
function incE(uint256 i) external {
number = number + i;
}
}编辑:
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更新的代码块:
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;
}
}因此,考虑到这一点,使用公共函数修饰符和外部函数修饰符显然是有区别的。有人知道为什么吗?
发布于 2023-03-15 06:53:25
让我们看看,您应该创建两个契约StorageP和StorageE。
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;
}
}请记住:第一个存储时隙呼叫比下一个呼叫更昂贵。
发布于 2023-03-15 07:29:57
使用外部功能而不是公共功能不会影响煤气。
直到solidity 0.6.9,只有外部函数允许调用数据参数。
公共函数强制使用更昂贵的内存参数。这意味着external函数比public函数更有效。
从0.6.9开始,所有函数都可以使用内存和调用数据。这意味着现在没有气体的差别。
https://ethereum.stackexchange.com/questions/147417
复制相似问题