본문 바로가기

Solidity

[solidity] Event란? (indexed)

solidity에서는 event를 통하여 값을 출력한다.

출력한 값은 블록안에 저장되고 저장된 값을 사용할 수 있다.

 

// SPDX-license-Identifier:MIT

pragma solidity >=0.8.0 < 0.9.0;

contract eventTest {

	event info(string name, uint256 age);

}

 

예를들어 위 정의된 info event에 string값인 name과 uint256값인 age를 출력하고 싶다면 어떻게 해야할까?

 

// SPDX-license-Identifier:MIT

pragma solidity >=0.8.0 < 0.9.0;

contract eventTest {

	event info(string name, uint256 age);

	function setInfo() public {
		emit info("heini",22);
	}

}

 

event는 이렇게 emit을 사용하여 출력한다.

컴파일 후 배포가 된다면 이제 블럭안에는 출력한 데이터가 저장이 되고 그걸 꺼내서 쓸 수 있게 된다.

indexed란?

이렇게 이벤트를 출력하고 정보를 넣다보면 정보들은 여러가지가 쌓이게 되고 그중 원하는 특정 데이터만 뽑고 싶을때가 있을 것이다.

그때 사용하는 것이 indexed이다.

 

// SPDX-license-Identifier:MIT

pragma solidity >=0.8.0 < 0.9.0;

contract eventTest {

	event info(string indexed name, uint256 age);

	function setInfo(string _name, uint256 _age) public {
		emit info(_name, _age);
	}
}

 

이렇게 indexed를 포함해서 이벤트를 방출하면 나중에 web3에서 getPastEvents등 함수들을 사용하여 filter해서 특정 값을 가지고 올 수 있다.

 

예)

function getInfo(){
	let event = await [배포된 컨트랙트 이름].getPastEvents('info',{filter:{name:["이름"]},fromBlock: 1, toBlock: "latest"});
}

 

이렇게 되면 name에 “이름" 이라는 값을 가지고 있는 이벤트를 가지고 올 수 있다.

 

'Solidity' 카테고리의 다른 글

ERC20 Openzeppelin  (0) 2022.03.07
[solidity] assert, revert, require란?  (0) 2022.02.28
[solidity] abi.encodePacked  (0) 2022.02.23
[solidity] This란?  (0) 2022.02.23
[크립토 좀비] 솔리디티 openzeppelin  (0) 2021.11.30