728x90

이 글은 인프런 "솔리디티 깨부수기" 강의를 수강한 후 정리한 글입니다. 

 

[지금 무료] 솔리디티 깨부수기 | D_One - 인프런

D_One | 이 강의를 통해서, 스마트 컨트랙 제작을 위한 솔리디티 언어를 배울수 있습니다., 코딩이 처음인 분들도 OK! 처음 배우는 솔리디티, 쉽게 시작해보세요. 강의 주제 📖 [사진] 이 강의에서

www.inflearn.com


 

 

indexed는 이벤트의 키워드로 블록들안에 출력된 이벤트들을 필터하여 특정한 이벤트 값들을 가지고 올 수 있다.

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0 <0.9.0;

contract Lec14 {
    event numberTracker(uint256 indexed num, string str);
    event numberTracker2(uint256 indexed num, string str);

    uint256 num =0;
    function PushEvent(string memory _str) public {
        emit numberTracker(num,_str);
        emit numberTracker2(num,_str);
        num ++;
    }
}

위의 예제에서 numberTracker2는 indexed가 있어 num을 통해 특정 이벤트 값들을 갖고 올 수 있다.

예를 들어 numberTraker2가 10개의 이벤트가 있다고 가정하고, 5라는 num만 필요하다면, 5만 입력하여 numberTraker2의 이벤트를 가져올 수 있다.

numberTraker는 동일한 가정에서 5라는 num만 필요하다면, 5만 적힌 이벤트를 갖고 올 수 없다.

즉, indexed를 통해 원하는 이벤트 값들을 필터링하여 갖고올 수 있음을 알 수 있다.

 

배포를 진행하면 logs에서 numberTracker와 numberTracker2가 출력된다. 

위에는 출력은 하되 특정 값들을 갖고 오는 상태가 아니기 때문에 차이점을 알아보기 위해 vscode로 확인해보겠다. 

 

위에와 같이 js 코드를 작성할 수 있으며, getPastEvents 함수를 생성하여 num을 통해 필터링을 진행할 수 있다. num은 2나 1일 때인 이벤트를 갖고올 수 있다.

fromBlock과 toBlock은 블록들의 범위를 나타낸다. 

 

이후 3개의 이벤트를 생성하면 블록안에 들어가게 되고, numberTracker은 indexed를 사용하지 않았기 때문에 필터링이 안되고 전부 출력되며, numberTracker2는 두 번째와 첫 번째 이벤트만 출력된다. 

+ Recent posts