<aside> 💡 本頁面目的是為了提升閱讀程式基本能力。有些技術文件或是項目方的白皮書都會提到的詞彙不可不會。
</aside>
構造函數(constructor)是一種特殊的函數,每個合約可以定義一個,並在部署合約的時候自動運行一次。它可以用來初始化合約的一些參數,例如初始化合約的owner地址:
address owner; // 定义owner变量
// 构造函数
constructor() public {
owner = msg.sender; // 在部署合约的时候,将owner设置为部署者的地址
}
修飾器(modifier)是solidity特有的語法,類似於面向對象編程中的decorator,聲明函數擁有的特性,並減少代碼冗餘。它就像鋼鐵俠的智能盔甲,穿上它的函數會帶有某些特定的行為。 modifier的主要使用場景是運行函數前的檢查,例如地址,變量,餘額等。
我們定義一個叫做onlyOwner
的modifier
:
// 定义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數據存儲位置有三類:storage,memory和calldata。不同存儲位置的gas成本不同。