event 선언 문법
이벤트는 event 키워드로 선언합니다. 함수와 비슷하게 매개변수 목록 이 있지만, 실행할 본문(중괄호 블록)은 없습니다. 선언은 보통 컨트랙트 최상단, 상태 변수 근처에 모아 둡니다.
기본 문법
event 이벤트이름(타입 변수명, 타입 변수명, ...); 형태입니다. 매개변수의 이름은 생략 가능 하지만, 가독성을 위해 적어 주는 편이 좋습니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Bank {
// event 이름(타입 변수명, 타입 변수명, ...);
event Deposit(address account, uint256 amount);
event Withdraw(address account, uint256 amount);
event Paused(); // 매개변수가 없는 이벤트도 가능
}이벤트 이름은 대문자로 시작(PascalCase) 하며, 이미 발생한 사건을 나타내는 명사형 또는 과거형을
씁니다(예: Deposit, Transfer, OwnershipTransferred).
매개변수 규칙
- 타입은 필수, 변수명은 선택:
uint256 amount또는 그냥uint256. - 일반 이벤트는 최대 3개 까지
indexed를 붙여topic으로 만들 수 있습니다. 아래의anonymous이벤트만 예외로 4개까지 가능합니다. - 매개변수 개수에는 제한이 없지만, 너무 많으면 발행
gas가 늘어납니다.
특수한 경우에만 쓰는 anonymous 이벤트
이벤트 뒤에 anonymous 를 붙이면 이벤트 시그니처가 첫 번째 topic 으로 기록되지 않습니다. 그래서 indexed 를 4개까지 쓸 수 있고 gas 도 약간 아낄 수 있지만, 검색이 까다로워져 특수한 경우에만 씁니다. 입문 단계에서는 거의 쓸 일이 없으니 "이런 게 있다" 정도만 알아 두세요.
event LowLevelLog(bytes data) anonymous;선언만으로는 아무 로그 도 남지 않습니다. 실제 기록은 함수 안에서 emit 으로 발행 해야 생깁니다.