블록체인 학습
0 XP

실습: 커스텀 에러 선언하기

이번 실습에서는 잔액이 부족할 때 매개변수가 있는 커스텀 에러 로 거래를 되돌리는 출금 컨트랙트를 완성합니다.

require(amount <= balance, "insufficient balance") 처럼 문자열로 검증할 수도 있지만, 문자열은 바이트코드에 저장되어 배포·실행 gas 를 늘립니다. 커스텀 에러(error)는 같은 의미를 4바이트 선택자로 압축하는 데다, requested·available 같은 실제 값까지 함께 실어 보낼 수 있어 디버깅에도 유리합니다. 커스텀 에러는 revert 와 함께 발생시킨다는 점을 기억하세요.

떠올릴 패턴

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
error TooMuch(uint256 requested, uint256 available);
 
contract Example {
    uint256 public pot;
 
    function take(uint256 amount) public {
        if (amount > pot) revert TooMuch(amount, pot);
        pot -= amount;
    }
}

해야 할 일:

  1. InsufficientBalance 라는 커스텀 에러를 선언하세요. 매개변수는 uint256 requested, uint256 available 두 개입니다.
  2. Bank 컨트랙트 안에 balance 라는 public uint256 상태 변수를 두세요.
  3. withdraw(uint256 amount) 함수를 구현하세요.
    • 요청 금액 amount 가 balance 보다 크면 revert InsufficientBalance(amount, balance) 로 되돌리세요.
    • 그렇지 않으면 balance 에서 amount 를 차감하세요.

커스텀 에러는 error 이름(타입 인자, ...); 형태로 선언하고, revert 이름(값, ...) 로 발생시킵니다.

완성 후 Run 을 눌러 컴파일하고 모든 조건을 통과하는지 확인하세요.

Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.