Solidity中的assert()、require()與revert()

昏睡的云雪發表於2024-07-18

兩者都是用於異常處理的語句中,都需要滿足條件才可以進行其他操作。類似於”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’);

相關文章