【BC003】bitcoindのコマンドを使ってみる
bitcoindを立ち上げる
まずはbitcoindを立ち上げます
bitcoindのビルド方法は過去の記事を参考にしてください
bitcoindを起動
コマンドプロンプトを起動します。
> cd ~/bitcoin-bodule/bin
> bitcoind
bitcoin-cliを動かす
コマンドプロンプトをもう一つ起動します。
> cd ~/bitcoin-bodule/bin
> bitcoin-cli getblockchaininfo
このように現在のブロック情報が返ってきます。
{
"chain": "main",
"blocks": 252787,
"headers": 513478,
"bestblockhash": "000000000000001ed72606fe0c520b4773ef3338660099b61753b8843505a4d6",
"difficulty": 50810339.04827648,
"mediantime": 1376806796,
"verificationprogress": 0.07188864191224033,
"initialblockdownload": true,
"chainwork": "00000000000000000000000000000000000000000000009bcddab6a6fcd48aa4",
"size_on_disk": 11569770343,
"pruned": false,
"softforks": [
{
"id": "bip34",
"version": 2,
"reject": {
"status": true
}
},
{
"id": "bip66",
"version": 3,
"reject": {
"status": false
}
},
{
"id": "bip65",
"version": 4,
"reject": {
"status": false
}
}
],
"bip9_softforks": {
"csv": {
"status": "defined",
"startTime": 1462060800,
"timeout": 1493596800,
"since": 0
},
"segwit": {
"status": "defined",
"startTime": 1479168000,
"timeout": 1510704000,
"since": 0
}
},
"warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"
}
エラーが出る場合
このようなエラーが出るときがあります。
ブロックが読み込まれていないので時間をあけて再度bitcoin-cli
を動かしてみてください。
※bitcoind
は起動したままで
error code: -28
error message:
Loading block index...
適当なコマンドを試してみる
getblockchaininfo
上記でこのようなコマンドを試しました。
> bitcoin-cli getblockchaininfo
その返り値の一部です。
"blocks": 252787,
"headers": 513478,
headers
というのは、現在のブロック高を示します。
blocks
はそのPCに同期されているブロック高を示します。
bitcoindを起動させておくと、blocks
がheaders
に追いついていきます。
getblockcount
同期済みのブロック高を返します。
執筆時の私の環境ではこのように返ってきます。
> bitcoin-cli getblockcount
252787
getblockhash
ブロックの番号を与えるとそのブロックのハッシュ値が返ってきます。
genesis block 0
> bitcoin-cli getblockhash 0
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
block 1
> bitcoin-cli getblockhash 1
00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048
同期していないブロックのハッシュを得ることはできません
> bitcoin-cli getblockhash 500000
error code: -8
error message:
Block height out of range
getblock
getblockhash
で得たハッシュ値を引数に与えることによって、そのブロックの詳細を得ることができます。
block 0
> bitcoin-cli getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
{
"hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
"confirmations": 364228,
"strippedsize": 285,
"size": 285,
"weight": 1140,
"height": 0,
"version": 1,
"versionHex": "00000001",
"merkleroot": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
"tx": [
"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"
],
"time": 1231006505,
"mediantime": 1231006505,
"nonce": 2083236893,
"bits": "1d00ffff",
"difficulty": 1,
"chainwork": "0000000000000000000000000000000000000000000000000000000100010001",
"nextblockhash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"
}
block 1
> bitcoin-cli getblock 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048
{
"hash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048",
"confirmations": 367576,
"strippedsize": 215,
"size": 215,
"weight": 860,
"height": 1,
"version": 1,
"versionHex": "00000001",
"merkleroot": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",
"tx": [
"0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098"
],
"time": 1231469665,
"mediantime": 1231469665,
"nonce": 2573394689,
"bits": "1d00ffff",
"difficulty": 1,
"chainwork": "0000000000000000000000000000000000000000000000000000000200020002",
"previousblockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
"nextblockhash": "000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd"
}
このブロック情報はBlockchain.infoなどでも確認することができます。
time
はUNIX時間です。
ブロックチェーンの構造として、ブロックNは常に直前のブロックであるN-1のブロックハッシュpreviousblockhash
を保持する片方向リストの形をとります。
※bitcoin-cli getblock [hash]
の結果によってnextblockhash
の値を知ることもできますが、これはメモリ上から算出しているだけで、ブロックデータ自体が次のブロック情報を知っているわけではない。
getconnectioncount
bitcoindコマンドなどでbitcoinのノードが起動すると、ノードP2P型ネットワークであるビットコイン・ネットワークと接続しようとします。
bitcoind起動直後、1ノードずつ接続されていきます。
> bitcoin-cli getconnectioncount
1
接続が安定すると、8ノード程度と接続された状態になります。
> bitcoin-cli getconnectioncount
8
getpeerinfo
接続している相手を確認することができます。
> bitcoin-cli getpeerinfo
[
{
"id": 1,
"addr": "59.167.191.159:8333",
"addrlocal": "153.177.13.197:33810",
"addrbind": "10.0.1.11:51843",
"services": "000000000000000d",
"relaytxes": true,
"lastsend": 1521030055,
"lastrecv": 1521030055,
"bytessent": 774972,
"bytesrecv": 3551534641,
"conntime": 1521022593,
"timeoffset": -12,
"pingtime": 1.036827,
"minping": 0.211548,
"version": 70015,
"subver": "/Satoshi:0.15.1/",
"inbound": false,
"addnode": false,
"startingheight": 513478,
"banscore": 0,
"synced_headers": 513489,
"synced_blocks": 370239,
"inflight": [
370496,
370510,
370521,
370537,
370544,
370551,
370559,
370566,
370573,
370581,
370588,
370596,
370602,
370609,
370617,
370624
],
"whitelisted": false,
"bytessent_per_msg": {
"addr": 5790,
"feefilter": 32,
"getaddr": 24,
"getdata": 763896,
"getheaders": 1021,
"ping": 1984,
"pong": 1984,
"sendcmpct": 66,
"sendheaders": 24,
"verack": 24,
"version": 127
},
"bytesrecv_per_msg": {
"addr": 34747,
"block": 3550780192,
"feefilter": 32,
"getheaders": 1021,
"headers": 12693,
"inv": 638498,
"ping": 2016,
"pong": 1984,
"sendcmpct": 66,
"sendheaders": 24,
"verack": 24,
"version": 126
}
},
...中略
}
}
]
stop
bitcoind
を終了させるときにはこのコマンドを打ち込みます。
> bitcoin-cli stop