Solidity

Solidity의 event와 로그 저장

mmalmmizal 2024. 12. 18. 23:31

이벤트

event

스마트계약에서 특정한 상태 변화나 동작이 발생했을 때 이를 알리기 위해 사용되는 기능이다. 클라이언트는 이 이벤트를 통해 스마트 계약에서 발생하는 특정 변화를 감지하고 반응할 수 있다.

  • 이벤트는 상속 가능한 계약 멤버

event는 다른 계약에서 상속받아 사용 가능

  • 트랜잭션 로그 저장

이벤트 발생시, 이벤트와 함께 전달된 인자들이 트랜잭션 로그에 저장됨.

 

event 키워드로 선언하며, argument를 받을 수 있는데 선언할 때 variable의 이름을 명시할 필요는 없다. indexed 라고 명시된 argument는 특별히 topics라고 불리는 indexed table(hash table)에 저장되어 나중에 event를 쉽게 찾을 수 있다.

event Updated (address indexed from, uint x);
//(address indexed, uint)처럼 타입만 나열해도 된다.

 

event에게 넘겨진 parameter들은 블록체인 내에 transaction log에 저장된다.

 

  • emit

이벤트를 호출하는 키워드. 이벤트를 발생시켜 블록체인에 기록하도록 한다. 트랜잭션 로그에 저장된다.

emit Updated(msg.sender, x);

상태 변수에 저장할 정보/ event를 사용해 로그를 남길 정보

https://violetboralee.medium.com/솔리디티-event란-무엇이고-state-변수와-어떤-차이가-있는가-92ddeacc3f95

 

  • 차이점

상태 변수(state variable)는 블록체인에 영구적으로 저장되며, 트랜잭션을 통해 변경될 수 있다.

event 는 블록체인에 로그로 저장되며, 외부 애플리케이션에서 로그 감지하여 특정 작업을 수행할 수 있다.

  • 저장 공간과 비용적 측면

이벤트 로그는 블록체인에 저장되지만, 상태저장공간 (이더리움의 경우 storage)에 저장되지 않는다.

 

또한 스마트 계약내에서 직접적으로 접근,수정할 수 없기 때문에 영구적 상태 변경이 필요하지 않기 때문에 상태 변수 사용보다 상대적으로 저렴하다.

 

  • 로그 저장

상태변수, 이벤트 로그 둘다 이더리움 노드의 storage에 저장된다. 그러나 상태변수는 모든 계정의 상태 정보를 포함하는 World State에 저장된다. 이벤트 로그는 트랜잭션 영수증의 일부로 저장되며 World State와는 별개의 공간에 저장된다.

 

'Solidity' 카테고리의 다른 글

업그레이드 가능한 contract (Proxy)  (0) 2025.04.03
ERC-5192 실습 : SBT (Soul Bound Token)  (0) 2025.02.25