Q. Dapp을 구현할때 히스토리 검색은 어떤 방식으로 진행되나요?

stompesi 2018. 12. 03.


서비스를 이용하려면 대게 지난 내역을 보기 마련이라고 생각됩니다.


하지만 지금 이더리움 스마트컨트랙트에서는 어떻게 구현하는지 궁금합니다.


공유하고 보상받기 ♥︎

1개의 답변이 있습니다.

질문자 & 큐레이터 채택
깃마스터 답변자인증
ISP Software 2018. 12. 04
100%의 채택

어떤 사항을 기록하시려는지 모르지만, 컨트랙트상에 히스토리를 저장하려면 구조체나 배열을 이용해서 원하시는 정보를 저장하실 수 있습니다. 그러나 이런 방식으로 하시게 되면 트랜젝션 실행할 때 가스가 많이 들게 되겠죠. 좋은 방법은 컨트랙트 이벤트를 사용하는 것입니다.


예를 들어 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하는 방식으로 구현하시면 프론트에서 트랜젝션 히스토리가 조회되실 겁니다.