event 란 무엇일까?
봐도봐도 헷갈려서 나 혼자만에 정리를 해볼려고 한다.
event
- 이벤트란 솔리디티 튜토리얼 문서에 따르면
이벤트는 계약의 상속 가능한 구성원입니다.
이벤트가 발생하고 트랜잭션 로그에 전달된 인수를 저장합니다.
이러한 로그는 블록체인에 저장되며 블록체인에 계약이 존재할 때까지 계약 주소를 사용하여 액세스할 수 있습니다.
생성된 이벤트는 계약 내에서 액세스할 수 없으며 이를 생성하고 내보낸 이벤트도 마찬가지입니다.
라고 하는데 이해가 되는 부분도 있고, 추상적인 부분도 있다.
이벤트가 필요한 이유는 무엇일까?
이벤트는 블록체인에서 어떤 일이 발생했음을 외부 사용자에게 알리는 데 사용된다.
따라서, smart contract 자체는 이벤트를 수신할 수 없습니다. 왜냐? 외부 사용자에게 알리는데 사용되기 때문이다.
블록체인의 모든 정보는 공개되어 있으며 충분히 가까운 거래를 살펴보면 모든 조치를 찾을 수 있지만 이벤트는 스마트 계약과 협력하여 외부 시스템 개발을 용이하게 하는 지름길이 된다고 한다.
컨트랙트는 특정 이벤트가 일어나는지 "귀를 기울이고" 그 이벤트가 발생하면 행동을 취한다.
정리해서
1. 거래로 인한 리턴값을 사용해야 할 때 ( 블록체인에서는 리턴값을 사용할 수 없다)
2. 함수의 트리거로 사용
3. 저렴한 데이터 저장공간으로 사용
이제 event를 사용해보자
// 이벤트를 선언한다
event IntegersAdded(uint x, uint y, uint result);
function add(uint _x, uint _y) public {
uint result = _x + _y;
// 이벤트를 실행하여 앱에게 add 함수가 실행되었음을 알린다:
IntegersAdded(_x, _y, result);
return result;
}
자바스크립트로 이를 구현하면 다음과 같다.
YourContract.IntegersAdded(function(error, result) {
// 결과와 관련된 행동을 취한다
})
그럼 emit 은 언제 쓸까?
: event를 emit하면 트랜잭션 로그에 전달된 인수를 저장한다.
이러한 로그는 블록체인에 저장되며 블록체인에 계약이 존재할 때까지 계약 주소를 사용하여 액세스할 수 있다.
생성된 이벤트는 계약 내에서 액세스할 수 없으며 이를 생성하고 emit된 이벤트도 마찬가지이다.
★ emit를 하지 않으면 event는 의미가 없다.
※ 이로써, 처음 튜토리얼 문서의 내용이 이해가 되었다!
'BlockChain > Solidity' 카테고리의 다른 글
proxy contract & upgradable contract 이란? (0) | 2023.03.12 |
---|---|
[Solidity] Wolfgame은 왜 ERC-1155를 사용하지 않았을까? (0) | 2023.03.12 |
[blockchain] view 함수는 정말 가스비가 무료일까? (view function cost?) (0) | 2023.03.12 |
[Solidity] CA, EOA (0) | 2022.08.04 |
[Solidity] 임의의 이름으로 토큰 만들기 (0) | 2022.07.27 |
댓글