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