Chapter 12 마무리 테스트
지금까지 배운 payable, msg.value, address.balance, 이벤트, call 송금,
그리고 접근 제어를 모두 한자리에 모아 간단한 기부함(DonationBox) 컨트랙트를 완성하세요.
돼지저금통 실습과 닮았지만, 이번에는 누적 기부액을 따로 기록하는 회계 로직이 추가됩니다.
여기서 꼭 구분해야 할 두 가지 숫자가 있습니다. totalDonated 는 "지금까지 들어온 총 기부액의
기록"이고, getBalance(즉 address(this).balance)는 "현재 컨트랙트에 남아 있는 잔액"
입니다. 인출이 일어나면 잔액은 줄지만 누적 기부 기록은 그대로 남으므로, 두 값은 시간이 지나며
달라집니다. 이 둘을 함께 관리하는 것이 이번 테스트의 핵심입니다.
해야 할 일:
DonationBox컨트랙트를 선언하세요.owner라는publicaddress상태 변수를 두고, 생성자에서msg.sender로 설정하세요.totalDonated라는publicuint256상태 변수로 누적 기부액을 추적하세요.Donated이벤트를 선언하세요.donatepayable함수에서msg.value를totalDonated에 더하고Donated이벤트를 emit 하세요.getBalance함수로 컨트랙트 잔액(uint256)을 반환하세요.withdraw함수에서owner만 전액을call로 인출하게 하세요.
totalDonated 는 입금 때마다 msg.value 만큼 더해 나가는 누적 기록이고, getBalance 는 그때그때
address(this).balance 를 읽어 현재 잔액을 돌려줍니다. 인출 후 두 값이 달라지는 이유를 곱씹어
보세요.
withdraw 는 require(msg.sender == owner, ...) 로 주인만 호출하게 막고, call 의 성공 여부를
반드시 검증하세요. 자금을 다루는 함수일수록 접근 제어와 결과 확인이 중요합니다.
완성 후 Run 을 눌러 모든 조건을 통과하는지 확인하세요.