2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

솔리디티에서 'revert'는 어떻게 사용하나요?

_____
Q: 솔리디티에서 'revert'는 무엇이며 어떻게 사용하나요?

A: 솔리디티(Solidity)에서 `revert`는 트랜잭션 실행 중 오류가 발생했을 때 상태 변경을 모두 되돌리고, 지정한 에러 메시지와 함께 호출을 중단하는 명령입니다. 주로 조건 검증 실패 시 사용되어 계약의 예외 처리를 구현할 때 매우 유용합니다.

---

사용법 예시:

```solidity
pragma solidity ^0.8.0;

contract Example {
uint public value;

function setValue(uint _value) public {
// 입력값이 100 이하일 때만 허용
if (_value > 100) {
revert("Value cannot be greater than 100");
}
value = _value;
}
}
```

- `revert("에러메시지")` 형태로 호출하면 트랜잭션이 중단되고, 잔액 및 상태 변경이 롤백됩니다.
- `require`문과 비슷하지만 `revert`를 직접 호출하면 좀 더 복잡한 조건 처리나 여러 에러 상황을 명확히 표현할 수 있습니다.

---

주요 특징:

- 상태 변경 및 가스 소모를 롤백합니다.
- 에러 메시지를 제공하여 디버깅과 호출자에게 문제의 원인을 알릴 수 있습니다.
- `revert`는 함수 내 조건을 검증하는 데 자주 사용됩니다.
- 컴파일러 버전 0.4.13 이상에서 지원되며, 0.8.x 버전에서는 내장 예외 처리 메커니즘으로 더욱 안정적입니다.

---

요약:

- `revert()`는 오류 발생 시 호출을 즉시 중지하고 상태를 원래대로 되돌립니다.
- `revert("에러 메시지")`를 통해 명확한 실패 원인 전달이 가능합니다.
- 조건 검증과 예외 처리를 위해 `if`문과 함께 자주 사용합니다.
- `require`와 함께 Solidity에서 안전한 코드 작성을 위한 표준적인 예외 처리 도구입니다.
Solidity에서 `revert`는 스마트 계약의 실행 중에 발생할 수 있는 오류를 처리하고, 상태를 이전 상태로 되돌리는 데 사용되는 중요한 기능입니다.

`revert`는 특정 조건이 충족되지 않을 때, 또는 예상치 못한 상황이 발생했을 때 계약의 실행을 중단하고, 모든 변경 사항을 취소하는 데 사용됩니다.

이 기능은 주로 오류 처리 및 예외 처리를 위해 사용됩니다.

`revert`의 기본 사용법 `revert`는 다음과 같은 형식으로 사용됩니다: ```solidity revert("Error message"); ``` 여기서 `"Error message"`는 오류의 원인을 설명하는 문자열입니다.

이 메시지는 트랜잭션이 실패했을 때, 호출자에게 반환됩니다.

이는 디버깅을 용이하게 하고, 사용자에게 문제가 무엇인지 알리는 데 도움이 됩니다.

예제 다음은 `revert`를 사용하는 간단한 스마트 계약의 예입니다: ```solidity pragma solidity ^0.8.0; contract SimpleStorage { uint256 private storedData; function set(uint256 x) public { if (x > 100) { revert("Value must be less than or equal to 100"); } storedData = x; } function get() public view returns (uint25

6) { return storedData; } } ``` 위의 계약에서 `set` 함수는 입력값 `x`가 100보다 클 경우 `revert`를 호출하여 오류 메시지를 반환합니다.

이 경우, 상태는 변경되지 않고, `storedData`는 이전 값으로 유지됩니다.

`require`와의 차이점 `revert`는 `require`와 유사한 기능을 수행하지만, 두 가지는 약간의 차이가 있습니다.

`require`는 조건이 충족되지 않을 때 자동으로 트랜잭션을 중단하고, `revert`는 명시적으로 호출해야 합니다.

`require`는 조건이 참일 때만 계속 진행하고, 거짓일 경우 `revert`를 호출하여 오류를 발생시킵니다.

예를 들어, 위의 예제를 `require`를 사용하여 작성할 수도 있습니다: ```solidity function set(uint256 x) public { require(x <= 100, "Value must be less than or equal to 100"); storedData = x; } ``` 이 경우, `require`는 조건이 충족되지 않을 때 자동으로 `revert`를 호출합니다.

`assert`와의 차이점 `assert`는 또 다른 오류 처리 방법으로, 주로 코드의 불변성을 검사하는 데 사용됩니다.

`assert`는 항상 참이어야 하는 조건을 검사하며, 실패할 경우 `revert`를 호출합니다.

일반적으로 `assert`는 개발자가 예상하지 못한 오류를 발견할 때 사용되며, 상태를 변경하는 함수에서는 사용하지 않는 것이 좋습니다.

가스 비용 `revert`가 호출되면, 해당 트랜잭션의 모든 상태 변경이 취소되고, 가스는 소비되지 않습니다.

그러나, `revert`가 호출되기 전까지 사용된 가스는 소모됩니다.

따라서, `revert`를 적절히 사용하여 불필요한 가스 소비를 방지하는 것이 중요합니다.

결론 `revert`는 Solidity에서 오류를 처리하고, 상태를 안전하게 되돌리는 데 필수적인 도구입니다.

이를 통해 스마트 계약의 안정성을 높이고, 사용자에게 명확한 오류 메시지를 제공할 수 있습니다.

`require`, `assert`, `revert`의 적절한 사용은 스마트 계약의 품질을 높이는 데 중요한 요소입니다.

작성자: 이서현 [비회원] | 작성일자: 1년 전 2024-11-22 19:32:05
조회수: 173 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.