Solidity

Solidity 中的常量和不可變關鍵字有什麼區別?

  • November 19, 2021

Solidity 中的常量和不可變關鍵字有什麼區別,如何使用它們?

兩者immutableconstant都是可用於狀態變數的關鍵字,以限制對其狀態的修改。不同的是,constant變數編譯後永遠不能改變,而immutable變數可以在建構子中設置。

文件

狀態變數可以聲明為常量或不可變。在這兩種情況下,變數在合約建構後都不能修改。對於常量變數,值必須在編譯時固定,而對於不可變變數,它仍然可以在構造時賦值。

範常式式碼片段如下:

pragma solidity >0.6.4 <0.7.0;

contract C {
   uint constant X = 32**22 + 8;
   string constant TEXT = "abc";
   bytes32 constant MY_HASH = keccak256("abc");
   uint immutable decimals;
   uint immutable maxBalance;
   address immutable owner = msg.sender;

   constructor(uint _decimals, address _reference) public {
       decimals = _decimals;
       // Assignments to immutables can even access the environment.
       maxBalance = _reference.balance;
   }

   function isBalanceTooHigh(address _other) public view returns (bool) {
       return _other.balance > maxBalance;
   }
}

需要注意的是,編譯器不會為這些變數保留儲存槽,並且每次出現都會被相應的值替換。

引用自:https://ethereum.stackexchange.com/questions/82259