이더리움에서 이벤트(logs)는 어떻게 발생되고 감지할까?

vinson·2022년 3월 16일
1

BlockChain 매운맛

목록 보기
1/3
post-thumbnail

Q. 이더리움에서 이벤트(logs)는 어떻게 발생되며, 클라이언트에서는 어떻게 감지하나요?

Event ?

  • 이벤트(event)란, 개발자들이 컨트랙트를 개발시 함수들이 호출될 때 블록에 기록을 남김으로써, 나중에 보기 편하게 기록을 찾아볼 수 있도록 삽입하는 것.
  • 프로그래밍 관전에서 봤을 때, 스마트 컨트랙트의 출력은 이더이다.
    그러나 이더를 보내는 것은 제한된 용도의 출력이고 Event는 스마트 컨트랙트의 다른 출력 수단이다.
  • Event(이하 이벤트)란 트랜잭션 내에서 호출될 수 있는 일종의 리턴값이 없는 함수이다.
  • 이벤트를 호출하면 그 호출한 기록이 Transaction Receipt라 불리는 트랜잭션 결과에 저장된다. 일종의 로그(log).

어떻게 발생할까?

누가 얼마를 보냈는지 기록하는 컨트랙트

위의 로그가 발생했다는 것을 JS web3.js라이브러리로 읽기

  • 결국 프론트엔드가 스마트 컨트랙트에서 함수가 실행되는것과 소통하기 위해 이용되는것이 Event이다.

어떻게 감지할까?

  • 스마트 컨트랙트가 event를 Send하면 프론트엔드가 listen 하는 식
  • 모든 트랜잭션 로그를 보는 것은 비효율적이다.

이벤트 호출을 Topic으로 변환하고 그 Topic을 블룸 필터로 만든다.

  • 이더리움 노드는 트랜잭션을 실행한 결과로 블룸 필터를 만들고, 수십 개의 트랜잭션을 모아 블록으로 만들 때에도 각 트랜잭션의 블룸필터를 모아 하나의 블룸 필터로 만든다.
  • 새로운 블록이 만들어졌을 때 내가 관심있는 이벤트가 발생했는지 여부를 알고 싶다면 해당 이벤트의 Topic을 블록 헤더의 블룸 필터에 조회하면 알 수 있다.
profile
Pay it forward

0개의 댓글