본문 바로가기

Solidity

[solidity] assert, revert, require란?

세가지는 모두 솔리디티의 에러 핸들러이다.

간단하게 말하자면 일정 조건에 부합하지 않으면 에러를 발생시키는 것 이다.

revert

  • 조건없이 에러를 발생시키고 gas를 환불 시켜준다.
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract revertTest{  
  function revertOccur() public pure{
      revert("에러 메세지");
  }
}

revert에서는 특정한 조건이 없다. 그냥 revert에 마주치면 에러가 발생한다.

또 이때까지 코드가 발생되면서 사용되었던 gas를 다시 돌려준다.

require

  • 특정한 조건에 부합하지 않으면 에러를 발생시키고 gas를 환불해준다.
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract requireTest{
	bool test = true;
  function requireOccur() public pure{
      require(test,"에러 메세지");
  }
}

if문 + revert같은 핸들러이다.

위와 같은 코드에서는 test가 true이기 때문에 에러 메세지 없이 코드가 이어져간다.

하지만 만약 test가 false라면 옆에 적힌 에러메세지가 발생한다.

이때 revert처럼 gas를 환불해준다.

assert

  • 가스를 전부 소비한 후 조건에 부합하지 않으면 에러를 발생시킨다.
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract assertTest{  
	bool test = false;
  function assertOccur() public pure{
      assert(test);
  }
}

위의 경우 assert안에 조건문을 작성했고 그 값은 false이다.

하지만 위의 require나 revert처럼 가스를 돌려주지 않고 가스를 전부 소비한다.

'Solidity' 카테고리의 다른 글

ERC20 Openzeppelin  (0) 2022.03.07
[solidity] Event란? (indexed)  (0) 2022.02.25
[solidity] abi.encodePacked  (0) 2022.02.23
[solidity] This란?  (0) 2022.02.23
[크립토 좀비] 솔리디티 openzeppelin  (0) 2021.11.30