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 |