🐡

【Solidity基礎】requireとrevertの違い

2023/08/16に公開

百聞は一見に如かずなのでまずはコードを見てみましょう。

require の使い方

test1
function testRequire(uint a, uint b) public pure returns(uint) {
  require(a == b, "not equal");
  
  return a * b;
}

上記のコードの意味は、
a = bだったら、a * b を返す
a = bじゃなかったら、"not equal"を返す

revert の使い方

test2
function testRevert(uint a, uint b) public pure returns(uint) {
  if(a == b) revert("equal");
  
  return a * b;
}

上記のコードの意味は、
a = bだったら、"equal"を返す
a = bじゃなかったら、a * b を返す

revertは if文と一緒に使うので
直感的にわかりやすいですね。

ただ、if文がなくても使用可能ですが、

if文を使わないと絶対にrevertの部分で
処理が止まってしまうので、注意が必要です。

require の使いどころ

NFTの販売の場面で使われたりします。

現在の発行枚数 = 供給枚数 となったら、
セールが終了する、のような使い方ですね。

イメージのためにコードで書くと、

function test(uint 発行枚数, uint 供給枚数) public pure returns(uint) {
  require(発行枚数 == 供給枚数, セール続行)
  
  return セール終了;
}

上記で日本語で書いたところは、
変数として持っておく必要が当然あるのですが
イメージとしてはこんな感じ。

Discussion