原文: 《Solidity 極簡入門: 11. 構造函數和修飾器》

我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每週更新1-3 講。

所有代碼和教程開源在github: github.com/AmazingAng/WTFSolidity

這一講,我們將用合約權限控制(Ownable)的例子介紹solidity 語言中構造函數(constructor)和獨有的修飾器(modifier)。

構造函數

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

Solidity極簡入門第十一講:構造函數和修飾器

修飾器

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

Solidity極簡入門第十一講:構造函數和修飾器

鋼鐵俠的modifier

我們定義一個叫做onlyOwner 的modifier:

Solidity極簡入門第十一講:構造函數和修飾器

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

Solidity極簡入門第十一講:構造函數和修飾器

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

OppenZepplin 的Ownable 標準實現:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol

總結

這一講,我們介紹了solidity 中的構造函數和修飾符,並舉了一個控制合約權限的Ownable 合約。