세가지는 모두 솔리디티의 에러 핸들러이다.
간단하게 말하자면 일정 조건에 부합하지 않으면 에러를 발생시키는 것 이다.
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 |