[개발] 비트코인 알아보기 - 2편 비트코인 api들을 파헤쳐봅시다.

in #kr-dev8 years ago (edited)

지난 시간에 비트코인 코어를 설치를 했고, 이제 bitcoind 클라이언트의 여러가지 api들을 알아보도록 하겠습니다.

지갑 주소 생성 : getnewaddress

신규 지갑 주소를 생성합니다. 이 주소를 가지고 거래소에서 비트코인을 제 bitcoind의 지갑주소로 전송이 가능합니다.

root@ubuntu:~# bitcoin-cli getnewaddress
1J2W3RmmKb1w18yJQWwhX4FKiPwMXM5rBw

지갑 거래내역 조회. : listtransactions

한 건도 없어서 내역이 나오지가 않습니다. 나중에 테스트넷 같은 걸로 붙어서 확인해봐야겠습니다.

root@ubuntu:~# bitcoin-cli listtransactions
[
]

지갑 주소 목록 조회. : getaddressesbyaccount

처음 조회를 해봤더니 아까 만든 1건이 조회되고, 한번 주소를 더 만드니 2개가 되었습니다.

root@ubuntu:~# bitcoin-cli getaddressesbyaccount ""
[
"1J2W3RmmKb1w18yJQWwhX4FKiPwMXM5rBw"
]
root@ubuntu:~# bitcoin-cli getnewaddress
1HH4oHeaf6j7Pw9jUd6iMA6XFNBcNGrNdW
root@ubuntu:~# bitcoin-cli getaddressesbyaccount ""
[
"1HH4oHeaf6j7Pw9jUd6iMA6XFNBcNGrNdW",
"1J2W3RmmKb1w18yJQWwhX4FKiPwMXM5rBw"
]

거래내역조회. : getrawtransaction

거래내역조회는 예전에 거래소에서 거래했던 txid를 가지고 조회를 해볼 수 있습니다. 제가 예전에 코인원에서 거래했던 txid를 가지고 조회해보도록 하겠습니다.

이렇게 코인원에 입금했던 거래가 있습니다. 이 거래를 조회해보도록 합시다.

root@ubuntu:/usr/local/bin# bitcoin-cli getrawtransaction 88e9402404c21762b8c4962270e10935dc3c231323ad90e40a218c7ddfe794f0

getrawtransaction 이 api는 해당거래의 hex 문자열을 가지고 옵니다.

root@ubuntu:/usr/local/bin# bitcoin-cli getrawtransaction 88e9402404c21762b8c4962270e10935dc3c231323ad90e40a218c7ddfe794f0
020000000107c77db54034db748a475d67f25da27999d9c46ee3d53b4129438ebb32feda15생략...

hex 문자열 디코딩 하기 : decodetransaction

이 hax 문자열을 다시 decode 해주는 api입니다. 한번 보도록 하겠습니다.

root@ubuntu:/usr/local/bin# bitcoin-cli decoderawtransaction 020000000107c77db54034db748a475d67f25da27999d9c46ee3d53b4129438ebb32feda15300000008a47304402205da81f9e95c8a080b4df0161565f33e7f76c04518b575e2c856572...생략

{
  "txid": "88e9402404c21762b8c4962270e10935dc3c231323ad90e40a218c7ddfe794f0",
  "hash": "88e9402404c21762b8c4962270e10935dc3c231323ad90e40a218c7ddfe794f0",
  "version": 2,
  "size": 1639,
  "vsize": 1639,
  "locktime": 0,
  "vin": [
    {
      "txid": "15dafe32bb8e4329413bd5e36ec4d99979a25df2675d478a74db3440b57dc707",
      "vout": 48,
      "scriptSig": {
        "asm": "304402205da81f9e95c8a080b4df0161565f33e7f76c04518b575e2c85657236f1c8b69302202048ac8a67e8be402dbb8d84b4d70148545a52fd436af3cc01a4a742485ed64e[ALL] 047146f0e0fcb3139947cf0beb870fe251930ca10d4545793d31033e801b5219abf56c11a3cf3406ca590e4c14b0dab749d20862b3adc4709153c280c2a78be10c",
        "hex": "47304402205da81f9e95c8a080b4df0161565f33e7f76c04518b575e2c85657236f1c8b69302202048ac8a67e8be402dbb8d84b4d70148545a52fd436af3cc01a4a742485ed64e0141047146f0e0fcb3139947cf0beb870fe251930ca10d4545793d31033e801b5219abf56c11a3cf3406ca590e4c14b0dab749d20862b3adc4709153c280c2a78be10c"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.00087646,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_HASH160 62ce1c2515be76f197b7c1be9153087c53da21f8 OP_EQUAL",
        "hex": "a91462ce1c2515be76f197b7c1be9153087c53da21f887",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "3AhT47W1C9F65aTuf4sw1j9nY6f8LswGYQ"
        ]
      }
    },
-- 생략 -- 

이렇게 트랜잭션을 txid로 조회할 수 있었습니다. 세부 내역들의 정확한 의미는 이해하지 못했지만 얼마만큼의 비트가 어떤 주소로 간다 정도로만 이해하고 넘어가겠습니다.
실제 거래소에서 거래했던 걸 내 pc에서 조회할수 있다니 신기방기합니다.

트랜잭션 조회하기 : gettransaction

이렇게 번거롭게 하지 않고 gettransaction api로 쉽게 조회하려면 txindex 값을 변경하고 인덱스가 다시 빌드되기를 기다려야 한다고 합니다. 경로는 ~/.bitcoin/bitcoin.conf인데 처음 구성 시 파일이 없으니 하나 만들어봅시다.

혹시나 해서 bitcoin.conf를 찾아보니 샘플이 있습니다.

root@ubuntu:~/.bitcoin# find / -name 'bitcoin.conf'
/app/bitcoin/contrib/debian/examples/bitcoin.conf

저녀석을 가지고 와서 설정을 하도록 하겠습니다. 이렇게 복사를 해오고...

root@ubuntu:~/.bitcoin# cp /app/bitcoin/contrib/debian/examples/bitcoin.conf .
root@ubuntu:~/.bitcoin# vi bitcoin.conf <= vi로 수정합시다.

적당한 곳에 txindex=1값을 추가하고 저장한 뒤에 bitcoind를 재시작해봅시다.

bitcoin-cli stop
bitcoind -reindex -daemon

-reindex 옵션을 주어 다시 인덱싱을 하도록 합니다. top 명령으로 서버를 보니 다시 인덱싱을 하느라 바쁜지 bitcoind가 cpu를 70~80% 정도로 많이 사용하고 있네요. 비트포럼을 보니 뭐 이건 모든 블럭을 아예 싹 다시 가져와야 한다고 하니 내일이나 사용해 볼수 있겠습니다.

root@ubuntu:~/.bitcoin# bitcoin-cli getblockchaininfo
{
"chain": "main",
"blocks": 0,
"headers": 312986,
생략...

네 이렇게 다시 헤더부터 동기화를 하고 있습니다. 아마 12시간정도 놔두면 될테니 내일쯤 다시 진행해보면 될듯 합니다.

api들을 살펴보니 코인 거래소나 관련 블럭체인 탐색 사이트의 기능들이 어떻게 만들어지는 유추 할수 있게 되네요. 지갑 주소를 생성하고 서명, 전송하거나 txid나 블럭해쉬값으로 디테일한 값들을 조회하는 기능들이 있으니 아마도 이것을 사용해서 사이트 구축을 하는 듯 싶네요.

다음시간에 동기화가 다시 끝나면 못해본 api들을 더 알아보도록 하겠습니다. :)

Sort:  

스스로 홍보하는 프로젝트에서 나왔습니다.
오늘도 좋은글 잘 읽었습니다.
오늘도 화이팅입니다.!

이것도 코어 설치해야 가능한거죠? 코어설치해보다가 거대한 용량에 포기하고 지웠네요 ㅎㅎㅎㅎ

네네 생각보다 리눅스는 풀노드도 금방 동기화 됩니다~ 한 170기가 정도 쓰는것 같습니다~

이 유용한 정보 주셔서 감사합니다. 정말 도움이되고 잘 쓰여졌습니다. @nhj12311

들렸다갑니다.

흐미~ nhj12311님 볼수록 헤롱부럽합니다! ^^

잘 모르는 내용이긴 하지만 읽어보고 갑니다

Yaar write in english

저도 블록체인 공부 시작해야 겠어요 ㅎ

추천합니다. 재밌네요 이거.

이번 이야기는 저번에 비해서 그리 어려운 이야기는 아니네요 ㅎㅎ api 아직 써보지는 않고 있는데, 간단한 기능들이 있는 툴 또는 코드라고 이해하면 되는 것이죠?
좋은 글 감사합니다!

예 비트코인을 피씨에 설치해서 사용할수 있는 api입니다. ^^

역시 복잡한ㅠ....

Coin Marketplace

STEEM 0.09
TRX 0.30
JST 0.037
BTC 106177.98
ETH 3584.17
USDT 1.00
SBD 0.55