Cover photo

Solidity 课程 14: 常量

合约的状态变量可以声明为不可变常数,数值定义后不能再次编辑,可以节约gas fee。有两种定义命令,constantimmutable ,区别是

  1. constant只支持值类型和字符串,immutable可以;

  2. constant必须声明时就赋值,immutable可以推迟到构造函数里赋值 。

举例:

    //1、constant只支持值类型和字符串,immutable可以;

    address public constant MY_ADDRESS = 0x777788889999AaAAbBbbCcccddDdeeeEfFFfCcCc;
    uint public constant MY_UINT = 123;
    string public constant MY_STRING = "123";
    bytes public constant MY_BYTES = "123";

    address public immutable MY_ADDRESS_IM = 0x777788889999AaAAbBbbCcccddDdeeeEfFFfCcCc;
    uint public immutable MY_UINT_IM = 123;
    // string public immutable MY_STRING_IM = 123;
    //bytes public immutable MY_BYTES = "123";


   //2、constant必须声明时就赋值,immutable可以推迟到构造函数里赋值
    uint public immutable MY_UINT_CONSTRUCTOR;
    uint256 public immutable IMMUTABLE_TEST;

    constructor(){
        MY_UINT_CONSTRUCTOR = 123;
        IMMUTABLE_TEST = test();
    }

    function test() public pure returns(uint256){
        uint256 what = 9;
        return(what);
    }

这节学习了不可变常量的两种定义方式,constantimmutable,可以节约gas fee。

Code:

https://github.com/Luca-Hsu/SuperSolidity/blob/main/14_Constants/Constants.sol

Reference:

https://solidity-by-example.org/constants

https://solidity-by-example.org/immutable

https://docs.soliditylang.org/en/v0.8.4/contracts.html#constant-and-immutable-state-variables