생활
Dapp을 구현할때 히스토리 검색은 어떤 방식으로 진행되나요?
서비스를 이용하려면 대게 지난 내역을 보기 마련이라고 생각됩니다.
하지만 지금 이더리움 스마트컨트랙트에서는 어떻게 구현하는지 궁금합니다.
55글자 더 채워주세요.
1개의 답변이 있어요!
어떤 사항을 기록하시려는지 모르지만, 컨트랙트상에 히스토리를 저장하려면 구조체나 배열을 이용해서 원하시는 정보를 저장하실 수 있습니다. 그러나 이런 방식으로 하시게 되면 트랜젝션 실행할 때 가스가 많이 들게 되겠죠. 좋은 방법은 컨트랙트 이벤트를 사용하는 것입니다.
예를 들어 ERC20 같은 경우에 transfer를 하게 되면,
event Transfer(address indexed from, address indexed to, uint256 value);와 같은 이벤트가 발생합니다. 이벤트 로그를 통해서 이벤트 히스토리를 조회해보실 수 있습니다.
var contractFilter = eth.Transfer({}, {fromBlock: 0, toBlock: "latest", address:"contract address"}) contractFilter.get(function (err, res) { console.log(err); console.log(res); })이런식으로 하시면 contract address에서 발생한 모든 Transfer event 조회가 가능합니다. 만드시는 Dapp의 컨트랙트 메쏘드에서 이벤트를 emit하는 방식으로 구현하시면 프론트에서 트랜젝션 히스토리가 조회되실 겁니다.