Tech/EIPs/#140
EIP 140카테고리 · 코어유형 · 표준 트랙상태 · 최종

REVERT instruction

EIP-140은 EVM에 REVERT 명령어를 도입하여 컨트랙트가 실행을 중단하고 상태 변경을 원복하면서도 호출자에게 오류 데이터를 반환할 수 있게 했습니다. 이는 스마트 컨트랙트 오류 처리의 중요한 개선이었습니다.

도입 이전의 문제

REVERT 이전에는 실행 실패 시 INVALID 또는 STOP을 통해 중단하면서 남은 가스를 모두 소진시켰습니다. 컨트랙트가 왜 실패했는지 호출자에게 알릴 방법이 없어 디버깅과 에러 처리가 매우 어려웠습니다.

기술적 기능

REVERT 명령어는 현재 실행 컨텍스트를 중단하고 모든 상태 변경을 원복하며, 메모리의 특정 범위를 반환 데이터로 제공할 수 있습니다. 중요하게도, 사용되지 않은 가스는 호출자에게 환불됩니다.

Solidity require/revert와의 관계

Solidity의 require(), revert() 문은 EIP-140의 REVERT 명령어 위에 구축됩니다. ABI 인코딩된 오류 메시지를 반환 데이터로 전달하는 현재의 오류 처리 패턴이 가능해진 것도 이 덕분입니다.

활성화 및 영향

EIP-140은 Byzantium 하드포크(2017)에서 활성화되었습니다. REVERT의 도입으로 스마트 컨트랙트의 방어적 프로그래밍 패턴이 크게 향상되었고, 가스 효율성도 개선되었습니다.

보안 의의

실패 시 오류 정보를 제공하면서 상태를 완전히 원복할 수 있는 능력은 안전한 스마트 컨트랙트 설계의 핵심입니다. REVERT는 이더리움 DeFi 생태계의 안전한 발전에 필수적인 기반을 제공했습니다.

공식 EIP 문서open_in_new