dev/Solidity

Events

_April 2022. 3. 15. 02:37

1. 이벤트 내뿜기(Emitting events) 

- 실행하기, 부르기인가 싶었는데 그건 invoke임.. 

 

2단계가 필요하다.

- 우선 이벤트를 선언한다

event ExampleEvent(uint _exampleArgument);

- function 바디 안에서 선언한 이벤트를 emit한다.

function exampleFunction() external {
    emit ExampleEvent(5);
}

emit를 한 후에 이벤트를 invoke할수 있다. 

 

🚩이벤트는 주로 어퍼카멜케이스를 쓰고, 펑션은 주로 로워카멜케이스를 쓴다.

이걸 naming convention (작명관례)라한다.

 

이벤트를 emit한 컨트랙트를 eth_getLogs  를 통해 로그를 찍으면 

이런 값을 리턴받는데, 데이터와 토픽에대해 논해보자.

DATA

 만약 주소 하나를 넣어서 이벤트를 선언, emit해보자. 그러면

실제로 emit하는 부분은 이런 형태가되는데, 이 주소가 data안에 실제로 들어가있는 것을 볼수있다.

 

TOPIC

이벤트는 보통 최소 1개의 토픽을 가지는데, 보통 이벤트 시그네쳐 해쉬다.

Deployed(address)의 Keccak-256해시값은 f40f...인데 토픽안에 그 값이 들어가있는것을 볼수있다.

anonymous 키워드를 넣으면 익명이벤트를 만들수도있고, 가스도 세이브되지만

이벤트간 분간이 힘들어짐.

 

 

2 Multiple Arguments 

펑션처럼 이벤트에도 여러개의 arguments 를 넣을수있다.

require(msg.sender == owner);

지정된조건이 없으면 종료됨

 

 

3. Indexed

이벤트 arguments에 indexed  키워드를 넣으면 필터링이 쉬워진다.

event HighScore(address indexed player);

 

인덱스 디테일 읽어도이해가안감

어드레스부터 다시 돌아야할것같음

 

다했지만 address부터 다시해야할듯