비트코인 계열의 알트코인을 이용하여 어플 지갑을 만들고 있습니다.
지갑 기능 중 거래내역을 보여주는 기능이 있는데 어플에서 뿐만 아니라 외부 거래소, 웹 지갑에서 발생된 거래내역도 보여주려고 합니다.
코인 서버 동기화는 제가 하지않았고 저도 경험이 많지 않아 질문드립니다.
여기서 궁금한 점은
gettransaction() 명령어로 txid를 조회하면
details 정보란에 receive, send 두 가지 가 나오는 경우가 있고
receive 혹은 send 정보만 나오는 경우가 있습니다.
왜 이런 현상이 발생하는지 알 수 있을까요?
참고로
저희가 관리하는 코인서버 내의 지갑 거래내역에서는 receive, send 다 나오지만
외부에서 발생된 거래들만 이런 문제가 있는것 같습니다.
이런 현상을 해결하는 방법이 있을까요?
getrawtransaction은 default로 mempool만 조회하고 블록체인을 조회하려면 bitcoin.conf에서나 아니면 bitcoind를 실행할때 txindex=1로 설정해주시면 됩니다. 이러하면 raw hex가 돌아오는데 이를 decoderawtransaction에 보내면 gettransaction처럼 JSON으로 돌아옵니다. 바로 JSON으로 받아보시려면 " 1"을 txid뒤에 붙여주시면 됩니다.
예시:
bitcoin-cli getrawtransaction 0cd7d76e5666a066ba7e7ecb84755a1c58bee6456de76b2516bb039589c9081d
-> hex숫자 돌아옴
getrawtransaction 0cd7d76e5666a066ba7e7ecb84755a1c58bee6456de76b2516bb039589c9081d 1
-> JSON value 돌아옴
gettransaction은 블록체인을 보지 않고 tx의 수수료와 send/receive등을 계산하는데 이를 하려면 내 tx가 뭔지 알아야 되고 또 이를 아려면 어떤 공개키들이 내것인지 알아야 하기 때문에 내 지갑에서만 가능합니다.
만약 앱에서 표시하시는 거래내역에 수수료/액수가 포함되어 있다면 getrawtransaction api는 따로 계산하지 않아서 이들을 계산하는 함수를 따로 만들어야 할겁니다.
참고로 비트코인 관련 질문이 더 있으시면 저희 서울비트코인 밋업 seoulbitcoin.kr 에 오셔서 물어보셔도 됩니다.