ethersocial.net 계정 정보를 입수하게 되어 드디어 ethersocial.net의 지긋지긋하던(?) 잔액이 제대로 나오지 않는 문제를 살펴보았습니다.
- 결론은 수정 완료.
- 원인은 이더리움 web3.js의 숨겨졌던 버그 + etc-explorer의 숨겨졌던 버그.
- 디스크 I/O 속도가 빠른 경우에는 node가 아무 문제가 없습니다만, ethersocial.net은 상당히 좋은 자원임에도 불구하고 디스크 액세스 속도가 느리더군요. (버퍼 읽기 속도는 무진장 빠름) 이것이 원인이 되었는지, 노드의 반응속도를 느리게 만들고, gesn 노드와 연결이 지속적으로 오류가 나게 만들던 원인으로 추정됩니다. 특히나 json-rpc가 연속적으로 call이 발생하는 경우 (잔액 확인시 3회의 json call 발생) 이 현상이 더 두드러지게 발생했습니다)
- 어떻게 고쳤나? var ret = web3.eth.getTransactionCount(hash) 식으로 호출되는 것을 web3.eth.getTransactionCount(hash, function(e, r) {...}); 식으로 콜백을 써서 호출시켜면 언제 그랬냐는 듯 문제가 사라집니다.
아무튼 간혹 TX 정보가 불완전하게 나오는 경우는 이와 연관된 문제라고 보시면 되며, 이 문제가 원인이 되어 익스플로러 node 어플이 빈번하게 죽거나, 잔액이 제대로 나오지 않는 문제는 이제 고쳤습니다~
그밖에,
https://github.com/ethereumclassic/explorer/pull/282 - 기왕 고치는 김에 batch job을 써서 3회 call되던 json rpc를 1회 콜되게끔 수정.
https://github.com/ethereumclassic/explorer/pull/201 - TX 페이지 문제 고치고, TX Fee 나오는 수정 적용. (소스코드님이 고치셨던 것)
아래 스샷처럼 여전히 오류를 내는 경우가 있으나, 앞서 밝힌 것 처럼 이는 디스크 속도가 조금 느린 경우에 발생하는 gesn node와 web3의 문제로 보이는것으로 추정됩니다. (예전에는 오류를 내고 죽어서 서버를 지속적으로 재시작 시키고 있었음)