構造函數

<aside> 💡 本頁面目的是為了提升閱讀程式基本能力。有些技術文件或是項目方的白皮書都會提到的詞彙不可不會。

</aside>

Solidity极简入门: 11. 构造函数和修饰器。

構造函數(constructor)是一種特殊的函數,每個合約可以定義一個,並在部署合約的時候自動運行一次。它可以用來初始化合約的一些參數,例如初始化合約的owner地址:

   address owner; // 定义owner变量

   // 构造函数
   constructor() public {
      owner = msg.sender; // 在部署合约的时候,将owner设置为部署者的地址
   }

修飾器

Solidity极简入门: 11. 构造函数和修饰器。

修飾器(modifier)是solidity特有的語法,類似於面向對象編程中的decorator,聲明函數擁有的特性,並減少代碼冗餘。它就像鋼鐵俠的智能盔甲,穿上它的函數會帶有某些特定的行為。 modifier的主要使用場景是運行函數前的檢查,例如地址,變量,餘額等。

我們定義一個叫做onlyOwnermodifier

   // 定义modifier
   modifier onlyOwner {
      require(msg.sender == owner); // 检查调用者是否为owner地址
      _; // 如果是的话,继续运行函数主体;否则报错并revert交易
   }

代有onlyOwner修飾符的函數只能被owner地址調用,比如下面這個例子:

   function changeOwner(address _newOwner) external onlyOwner{
      owner = _newOwner; // 只有owner地址运行这个函数,并改变owner
   }

我們定義了一個changeOwner函數,運行他可以改變合約的owner,但是由於onlyOwner修飾符的存在,只有原先的owner可以調用,別人調用就會報錯。這也是最常用的控制智能合約權限的方法。

數據存儲位置

Solidity 课程 4: 数据存储和作用域

Solidity數據存儲位置有三類:storage,memory和calldata。不同存儲位置的gas成本不同。

用法