Solidity 不可变量 immutable

Solidity immutable 是另一种常量的表达方式。与常量类似,但是不必硬编码,可以在构造函数时传值,部署后无法改变。

immutable 不可变量同样不会占用状态变量存储空间,在部署时,变量的值会被追加的运行时字节码中, 因此它比使用状态变量便宜的多,也同样带来了更多的安全性。

immutable  特性在很多时候非常有用, 最常见的如 ERC20 代币用来指示小数位置的 decimals 变量,它是一个不能修改的变量,很多时候我们需要在创建合约的时候指定它的值,这时 immutable 就大有用武之地, 类似的还有要保创建者地址、关联合约地址等。

immutable 不可变量三种赋值方式:

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

contract Immutable {
   address public immutable owner = msg.sender;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Immutable {
   address public immutable owner;

   constructor() {
      owner = msg.sender;
   }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Immutable {
   address public immutable owner;

   constructor(address _owner) {
      owner = _owner;
   }
}

immutable 不可变量,只能在状态变量声明和构造函数中赋值,其它位置不允许。

下一章:Solidity log 日志

使用 solidity 编写的智能合约,调试时可以通过打印 Log 的方式,查看合约运行过程中的数据。我们可以使用以下方法:在合约中创建一个event,命名为 Log。在想要打印日志的地方调用事件 emit ...