블록체인 학습
0 XP

실습: 이벤트와 struct 함께 사용하기

이번 실습에서는 struct 에 데이터를 저장하면서, 동시에 이벤트로 그 사실을 외부에 알립니다. "데이터는 상태 변수 에, 사건 알림은 이벤트에"라는 실무 패턴을 직접 구현해 봅니다.

사용자 정보를 User[] 배열에 push 하면 그 값은 스토리지에 영구 저장되어 컨트랙트가 다시 읽을 수 있습니다. 하지만 dApp 화면은 "방금 새 사용자가 추가됐다"는 사실을 즉시 알아야 UI를 갱신합니다. 그래서 상태 변수 갱신 직후 UserAdded 이벤트를 발행해 외부에 알립니다.

배열에 추가하는 작업(상태 변수 갱신)을 먼저 하고, 그 다음 emit 으로 사건을 기록하세요. 이렇게 하면 로그 가 남은 시점에는 데이터가 이미 확정되어 있습니다.

해야 할 일:

  1. Registry 컨트랙트 안에 User 라는 struct 를 선언하세요. 필드는 string name 과 uint256 age 입니다.
  2. users 라는 public 동적 배열을 선언하세요. 타입은 User[] 입니다.
  3. UserAdded 라는 이벤트를 선언하세요. 매개변수는 string name 과 uint256 age 입니다.
  4. addUser(string memory name, uint256 age) 라는 public 함수를 만드세요. 새 User 를 users 에 추가한 뒤 UserAdded 이벤트를 발행하세요.

배열에 구조체를 추가할 때는 users.push(User(name, age)); 처럼 작성합니다. 추가 직후 emit UserAdded(name, age); 로 이벤트를 발행하세요.

여기서 name 은 indexed 가 아니므로 원본 문자열 그대로 데이터 영역에 담깁니다. 만약 string 을 indexed 로 했다면 값이 아니라 해시가 topic 으로 저장된다는 점을 기억해 두세요.

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

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

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