gas优化: 状态变量的可视范围(public, private, internal)对gas消耗的影响

有下属合约:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

contract A {
    uint public value = 100;
    uint private temp = 0;

    function get() external returns (uint) {
        temp = 1;
        return value;
    }

    function set() external {
        value = 99;
    }
}

contract B {
    uint private value = 100;
    uint private temp = 0;

    function get() external returns (uint) {
        temp = 1;
        return value;
    }

    function set() external {
        value = 99;
    }
}

contract C {
    uint internal value = 100;
    uint private temp = 0;

    function get() external returns (uint) {
        temp = 1;
        return value;
    }

    function set() external {
        value = 99;
    }
}

三个合约只有value变量的可视范围有区别,分别是public, privateinternal
我们可以从部署和执行两个方面探求gas消耗量,最后的结果为:

合约 可视范围 执行 gas消耗量
A public 部署 134009
A public get 45615
A public set 26244
B private 部署 124921
B private get 45593
B private set 26222
C internal 部署 124909
C internal get 45593
C internal set 26222

可以得出结论:
部署的时候,gas消耗量排行为:public > private > internal
获取的时候,gas消耗量排行为:public > private = internal
设置的时候,gas消耗量排行为:public > private = internal

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容