Chapter 10 마무리 테스트
이번 테스트에서는 이 차시에서 배운 이벤트 선언, emit 발행, indexed 매개변수, 매핑(상태 변수) 을 종합해 작은 토큰 컨트랙트를 완성합니다. 실제 ERC-20의 축소판이라고 보면 됩니다.
지갑과 익스플로러는 표준 Transfer(address indexed from, address indexed to, uint256 value) 로그 를 읽어 거래 내역을 보여줍니다. from 과 to 가 indexed 라서 topic 으로 저장되고, 덕분에 "이 주소가 보낸/받은 전송"을 빠르게 조회할 수 있습니다. 시그니처가 한 글자라도 다르면 표준 도구가 인식하지 못하니 정확히 맞추세요.
토큰 전송은 ① 보내는 사람 잔액 확인(require) → ② 잔액 갱신(상태 변수) → ③ Transfer 발행 순서로 작성합니다. getBalance 는 잔액을 바꾸지 않고 조회만 하므로 view 로 선언합니다.
해야 할 일:
EventToken컨트랙트를 만드세요.balanceOf라는public매핑(address => uint256)을 선언하세요.Transfer이벤트를 선언하세요. 매개변수는address indexed from,address indexed to,uint256 value입니다.- 생성자에서 배포자(
msg.sender)에게1000만큼의 잔액을 주세요. transfer(address to, uint256 value)함수를 만드세요.- 보내는 사람의 잔액이 충분한지
require로 확인 - 잔액을 갱신(보내는 쪽 감소, 받는 쪽 증가)
Transfer이벤트 발행
- 보내는 사람의 잔액이 충분한지
getBalance(address account)함수를 만드세요. 해당 주소의 잔액을view로 반환합니다.
balanceOf 를 public 으로 두면 컴파일러가 자동 getter 를 만들어 줍니다. 그래도 이 테스트는
명시적으로 getBalance 를 요구하니 view 함수로 따로 구현하세요.
완성 후 Run 을 눌러 모든 조건을 통과하는지 확인하세요.