兩者都是用於異常處理的語句中,都需要滿足條件才可以進行其他操作。類似於”if()"
對於”assert()“
該關鍵字常用於結尾處用來,為了防止發生任何非常糟糕的事情
檢查溢位(上溢位或者下溢位)
檢查不變數
更改後驗證狀態
預防永遠不會發生的情況
如果使用則將消耗掉所有剩餘的gas,並恢復所有的操作並意味著發生了程式碼層面的錯誤事件。
對於"require()"
該關鍵字可隨意用,用途廣泛,通常應用於函式的開頭,用來檢查條件的功能
驗證一個使用者的輸入是否合法:require(input<20); 驗證一個外部協議的響應:require(external.send(amount)); 判斷執行一段語句的前置條件,驗證合約執行前的狀態: require(block.number > SOME_BLOCK_NUMBER) or require(balance[msg.sender]>=amount); require應該被最常使用到;一般用於函式的開頭處。
如果使用則將退還所有剩餘的gas,同時可以返回一個值(自定義的報錯資訊)。
對於“revert()”
會撤回所有的狀態轉變。
1.它允許你返回一個值; 2.它會把所有剩下的gas退回給caller 呼叫起來就像這樣子: revert(‘Something bad happened’); require(condition, ‘Something bad happened’);
。