程式麻瓜打造區塊鏈網站9-solidity Require&Modifier函式修飾詞


智能合約裡的函式我們不想讓每個人都能使用,而是只有自己能使用,或是需要達成某個條件才能使用的話就需要require,當然也可以用最傳統的if函式,以下舉例這個函式設定為只有部屬合約的人owner才能使用:

address owner;  //宣告地址變數owner
constructor()public{
owner = msg.sender;
}// 初始設定讓owner為與合約互動者的地址(這裡也就是部屬者)
uint public count;
function onlyOwner() public {
if (msg.sender == owner) {
count++;
}//若與合約互動者為部屬者 則讓函式運行 使count加一
}

onlyOwner這個函式如果呼叫者不是部屬者,則甚麼都不會改變;我們可以用requireif函式化簡

function onlyOwner() public { 
require (msg.sender==owner);//若與合約互動者為部屬者 則讓函式運行
count++;
}

用require除了可以化簡之外的差異就是手續費,用if這個方式跑完函式,手續費就被吃掉了,但是用require則會直接中止並返還所有的手續費。另外,require通常是寫在函式的第一行,但是如果寫在後面,且不符合require條件,前面的指令一樣會被打回原形

uint publich count = 0;
function onlyOwner() public {
count++; //count為1
count++; //count為2
require (msg.sender==owner);//若互動者不是owner 前面指令通通不算
count++;
}//count變回0

如果我們要讓很多函式都加入某個require條件,而且那個條件又臭又長的話,編輯和管理上就會很麻煩,所以要用modifier簡化

modifier onlymod {     //宣告一個叫做onlymod的修飾詞
require(msg.sender==owner); //寫出條件
_; //表示先執行完_;之前的東西才會執行函式
}
function onlyOwner() public onlymod { //加上修飾詞onlymod
count++;
}

整個系列文教學到這裡也學了一點網頁程式和智能合約的皮毛了,差不多能做點成果出來惹,之後的教學我們開始學如何整合兩者。