这一讲,我们介绍solidity中两个关键字,constant(常量)和immutable(不变量)。状态变量声明这个两个关键字之后,不能在合约后更改数值;并且还可以节省gas。另外,只有数值变量可以声明constant和immutable;string和bytes可以声明为constant,但不能为immutable。
constant和immutable
constant
constant变量必须在声明的时候初始化,之后再也不能改变。尝试改变的话,编译不通过。
immutable
immutable变量可以在声明时或构造函数中初始化,因此更加灵活。
你可以使用全局变量例如address(this),block.number ,或者自定义的函数给immutable变量初始化。在下面这个例子,我们利用了test()函数给IMMUTABLE_TEST初始化为9:
在remix上验证
- 部署好合约之后,通过remix上的getter函数,能获取到constant和immutable变量初始化好的值。
- constant变量初始化之后,尝试改变它的值,会编译不通过并抛出TypeError: Cannot assign to a constant variable.的错误。
- immutable变量初始化之后,尝试改变它的值,会编译不通过并抛出TypeError: Immutable state variable already initialized.的错误。
总结
这一讲,我们介绍solidity中两个关键字,constant(常量)和immutable(不变量),让不应该变的变量保持不变。这样的做法能在节省gas的同时提升合约的安全性。